Unable to convert expression into double array. Cannot use quiver.
3 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
I know the problem is I use a variable to assign the function but I don't know how to fix.
Hope anybody can help me.
Thank a lot.
Here is my code:
clc
close all
syms x y c
k = 5;
[x,y] = meshgrid(-3:1:3);
[P] = vector_inputP();
[Q] = (vector_inputQ(k));
kt = kttruongbaotoan(P,Q);
if kt == 1
F = tinhhamthe(P,Q);
F = expand(F);
disp(F);
[P] = vector_inputP();
[Q] = (vector_inputQ(k));
quiver(x,y,P,Q);
end
%% Question A
function [kt] = kttruongbaotoan(P,Q)
syms x y
if diff(P,y)==diff(Q,x)
fprintf('*>Truong vecto F = < Q , P > = ');
disp([Q,P]);
fprintf(' la truong bao toan. Ham the F(x,y) = ');
kt=1;
else
fprintf('*>Truong vecto F = < Q , P > = ');
disp([Q,P]);
fprintf('khong la truong bao toan\n');
kt=0;
end
end
%% Question B
function [F] = tinhhamthe(P, Q)
syms x y c
F1 = expand(int( P , x));
F2 = Q - diff(F1,y);
F2 = int(F2, y);
F = F2 + F1 + c;
end
%%
function [P] = vector_inputP(k)
syms x y
if k == 5
P = 2 * x - 3 * y;
elseif k == 6
P = exp(x) * cos(y);
elseif k == 7
P = exp(x) * sin(y);
elseif k == 8
P = 3 * x^2 - 2 * y^2;
elseif k == 9
P = y * exp(x) + sin(y);
elseif k == 10
P = x * y * cos(x*y) + sin(x*y);
elseif k == 11
P = log(y)+ 2 * x * y^3;
elseif k == 12
P = x * y * cosh(x*y) + sinh(x*y);
end
end
%%
function [Q] = vector_inputQ(k)
syms x y
if k == 5
Q = - 3*x + 4*y - 8;
elseif k == 6
Q = exp(x) * sin(y);
elseif k == 7
Q = exp(x) * cos(y);
elseif k == 8
Q = 4*x*y + 3;
elseif k == 9
Q = exp(x) + x * cos(y);
elseif k == 10
Q = x^2 * cos(x*y);
elseif k == 11
Q = 3 * x^2 * y^2 + x / y;
elseif k == 12
Q = x^2 * cosh(x*y);
end
end
0 Kommentare
Antworten (1)
VBBV
am 29 Mär. 2024
@Tai Nguyen, Use a different variable name for meshgrid outputs and use subs for symbolic expressions to replace with numeric arrays
syms x y c
k = 5;
[X,Y] = meshgrid(-3:1:3); % use a different variable name for meshgrid outputs
[P] = vector_inputP(k);
[Q] = (vector_inputQ(k));
kt = kttruongbaotoan(P,Q);
if kt == 1
F = tinhhamthe(P,Q);
F = expand(F);
disp(F);
[P] = vector_inputP(k);
[Q] = (vector_inputQ(k));
P = double(subs(P,{x,y},{X,Y}));
Q = double(subs(Q,{x,y},{X,Y}));
quiver(X,Y,P,Q);
end
%% Question A
function [kt] = kttruongbaotoan(P,Q)
syms x y
if diff(P,y)==diff(Q,x)
fprintf('*>Truong vecto F = < Q , P > = ');
disp([Q,P]);
fprintf(' la truong bao toan. Ham the F(x,y) = ');
kt=1;
else
fprintf('*>Truong vecto F = < Q , P > = ');
disp([Q,P]);
fprintf('khong la truong bao toan\n');
kt=0;
end
end
%% Question B
function [F] = tinhhamthe(P, Q)
syms x y c
F1 = expand(int( P , x));
F2 = Q - diff(F1,y);
F2 = int(F2, y);
F = F2 + F1 + c;
end
%%
function [P] = vector_inputP(k)
syms x y
if k == 5
P = 2 * x - 3 * y;
elseif k == 6
P = exp(x) * cos(y);
elseif k == 7
P = exp(x) * sin(y);
elseif k == 8
P = 3 * x^2 - 2 * y^2;
elseif k == 9
P = y * exp(x) + sin(y);
elseif k == 10
P = x * y * cos(x*y) + sin(x*y);
elseif k == 11
P = log(y)+ 2 * x * y^3;
elseif k == 12
P = x * y * cosh(x*y) + sinh(x*y);
end
end
%%
function [Q] = vector_inputQ(k)
syms x y
if k == 5
Q = - 3*x + 4*y - 8;
elseif k == 6
Q = exp(x) * sin(y);
elseif k == 7
Q = exp(x) * cos(y);
elseif k == 8
Q = 4*x*y + 3;
elseif k == 9
Q = exp(x) + x * cos(y);
elseif k == 10
Q = x^2 * cos(x*y);
elseif k == 11
Q = 3 * x^2 * y^2 + x / y;
elseif k == 12
Q = x^2 * cosh(x*y);
end
end
0 Kommentare
Siehe auch
Kategorien
Mehr zu Vector Fields finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!