函数求导循环计算语句
下面这段计算:B1=;
B2=;
B3=;
B4=;
B5=;
B6=;
Z1=;
Z2=;
S=zeros(6,1);
for i=1:6
a1=B1(i,1);
a2=B2(i,1);
a3=B3(i,1);
a4=B4(i,1);
a5=B5(i,1);
a6=B6(i,1);
z1=Z1(i,1);
z2=Z2(i,1);
syms s
f=sym('(a1*sin(acos(-tan(z1-s)*tan(z2)))+a2*acos(-tan(z1-s)*tan(z2))+a3)*cos(s)+(a4*sin(acos(-tan(z1-s)*tan(z2)))-a5*acos(-tan(z1-s)*tan(z2)))*sin(s)+a6');
d=diff(f);
d=double(d);
d=subs(d,a1,B1(i+1,1));
d=subs(d,a2,B2(i+1,1));
d=subs(d,a3,B3(i+1,1));
d=subs(d,a4,B4(i+1,1));
d=subs(d,a5,B5(i+1,1));
d=subs(d,a6,B6(i+1,1));
d=subs(d,z1,Z1(i+1,1));
d=subs(d,z2,Z2(i+1,1));
%%定义精度,显示为小数
digits(4);
vpa(d);
solve('d=0','s');
S(i,1)=s;
end
出现问题如下:
??? Error using ==> eval
Undefined function or variable 'a1'.
Error in ==> sym.double at 45
D = reshape(eval(X),siz);
但是
>> a1
a1 =
936
是正确的。
这些问题怎么解决呢?请教大家,这里先谢谢了 ^^ f=sym('(a1*sin(acos(-tan(z1-s)*tan(z2)))+a2*acos(-tan(z1-s)*tan(z2))+a3)*cos(s)+(a4*sin(acos(-tan(z1-s)*tan(z2)))-a5*acos(-tan(z1-s)*tan(z2)))*sin(s)+a6');
不能这样,引号内没法把a1等代入,用subs代
回复 2楼 的帖子
就是用下面的句子,想让数值代入的,但不能实现。d=subs(d,a1,B1(i+1,1));
d=subs(d,a2,B2(i+1,1));
d=subs(d,a3,B3(i+1,1));
d=subs(d,a4,B4(i+1,1));
d=subs(d,a5,B5(i+1,1));
d=subs(d,a6,B6(i+1,1));
d=subs(d,z1,Z1(i+1,1));
d=subs(d,z2,Z2(i+1,1)); clear all;
clc;
B1=;
B2=;
B3=;
B4=;
B5=;
B6=;
Z1=;
Z2=;
S=zeros(6,1);
syms s a1 a2 a3 a4 a5 a6 z1 z2
for i=1:6
f=(a1*sin(acos(-tan(z1-s)*tan(z2)))+a2*acos(-tan(z1-s)*tan(z2))+a3)*cos(s)+(a4*sin(acos(-tan(z1-s)*tan(z2)))-a5*acos(-tan(z1-s)*tan(z2)))*sin(s)+a6;
d=diff(f,'s');
d=subs(d,a1,B1(i));
d=subs(d,a2,B2(i));
d=subs(d,a3,B3(i));
d=subs(d,a4,B4(i));
d=subs(d,a5,B5(i));
d=subs(d,a6,B6(i));
d=subs(d,z1,Z1(i));
d=subs(d,z2,Z2(i));
%%定义精度,显示为小数
digits(6);
vpa(d);
ss=subs(solve(d));%%%问题在这
S(i)=ss;
end
提示有漏解 你再看下help solve吧
The input to solve can be either symbolic expressions or strings. If eq is a symbolic expression (x^2-2*x+1) or a string that does not contain an equal sign ('x^2-2*x+1'), then solve(eq) solves the equation eq=0 for its default variable (as determined by findsym).
S =
0.5806
-0.2942
-0.0343
0.5187
2.8570
-6.2180
回复 5楼 的帖子
谢谢小西主任^^我运行自己的语句每次到sovle那句都会卡住,运行您的也是在ss这句就卡住了,看不到结果。不知道为什么?
有漏解,可能是因为一个方程计算出来有2个解,那么S应该为6行2列,而前面定义的S只有6行1列。
关键是我现在不能完整的运行这些语句,求救。谢谢:)
回复 6楼 的帖子
我运行没问题啊我是2008a版本的回复 5楼 的帖子
会不会是因为版本不同,所以我算不到结果呢?我用的是7.0.0.19920 (R14) 版。
回复 8楼 的帖子
你先运行下帮助里的例子,能否得到正确解回复 9楼 的帖子
运行帮助里的例子,可以得到正确解的。回复 楼主 的帖子
a1=B1(i,1);a2=B2(i,1);
a3=B3(i,1);
a4=B4(i,1);
a5=B5(i,1);
a6=B6(i,1);
z1=Z1(i,1);
z2=Z2(i,1);
这一步运行完a1是数字啦。所以下面的句子语法是错误的。
d=subs(d,a1,B1(i+1,1));
我是这样觉得的。
页:
[1]