声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1628|回复: 10

[综合讨论] 函数求导循环计算语句

[复制链接]
发表于 2008-7-8 09:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
下面这段计算:
B1=[936 850 1195 773 1007 604];
B2=[2.3 4.2 7.5 4.5 3.7 0.5];
B3=[116 230 139 202 122 119];
B4=[782 710 999 647 842 505];
B5=[2.8 5 9 5.3 4.4 0.6];
B6=[546 702 660 624 579 430];
Z1=[936 850 1196 773 1007 605];
Z2=[0.17 0.33 0.4 0.38 0.25 0.06];
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
是正确的。

这些问题怎么解决呢?请教大家,这里先谢谢了 ^^
回复
分享到:

使用道具 举报

发表于 2008-7-8 10:51 | 显示全部楼层
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代
 楼主| 发表于 2008-7-8 12:57 | 显示全部楼层

回复 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));
发表于 2008-7-8 16:50 | 显示全部楼层
  1. clear all;
  2. clc;
  3. B1=[936 850 1195 773 1007 604];
  4. B2=[2.3 4.2 7.5 4.5 3.7 0.5];
  5. B3=[116 230 139 202 122 119];
  6. B4=[782 710 999 647 842 505];
  7. B5=[2.8 5 9 5.3 4.4 0.6];
  8. B6=[546 702 660 624 579 430];
  9. Z1=[936 850 1196 773 1007 605];
  10. Z2=[0.17 0.33 0.4 0.38 0.25 0.06];
  11. S=zeros(6,1);
  12. syms s a1 a2 a3 a4 a5 a6 z1 z2

  13. for i=1:6
  14. 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;
  15. d=diff(f,'s');
  16. d=subs(d,a1,B1(i));
  17. d=subs(d,a2,B2(i));
  18. d=subs(d,a3,B3(i));
  19. d=subs(d,a4,B4(i));
  20. d=subs(d,a5,B5(i));
  21. d=subs(d,a6,B6(i));
  22. d=subs(d,z1,Z1(i));
  23. d=subs(d,z2,Z2(i));
  24. %%定义精度,显示为小数
  25.     digits(6);
  26.     vpa(d);
  27.     ss=subs(solve(d));%%%问题在这
  28.     S(i)=ss;
  29. end
复制代码



提示有漏解
发表于 2008-7-8 16:52 | 显示全部楼层
你再看下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

评分

1

查看全部评分

 楼主| 发表于 2008-7-9 09:35 | 显示全部楼层

回复 5楼 的帖子

谢谢小西主任^^

我运行自己的语句每次到sovle那句都会卡住,运行您的也是在ss这句就卡住了,看不到结果。不知道为什么?

有漏解,可能是因为一个方程计算出来有2个解,那么S应该为6行2列,而前面定义的S只有6行1列。

关键是我现在不能完整的运行这些语句,求救。谢谢:)
发表于 2008-7-9 10:27 | 显示全部楼层

回复 6楼 的帖子

我运行没问题啊  我是2008a版本的
 楼主| 发表于 2008-7-9 11:02 | 显示全部楼层

回复 5楼 的帖子

会不会是因为版本不同,所以我算不到结果呢?
我用的是7.0.0.19920 (R14) 版。
发表于 2008-7-9 13:38 | 显示全部楼层

回复 8楼 的帖子

你先运行下帮助里的例子,能否得到正确解
 楼主| 发表于 2008-7-9 15:22 | 显示全部楼层

回复 9楼 的帖子

运行帮助里的例子,可以得到正确解的。
发表于 2008-7-9 20:27 | 显示全部楼层

回复 楼主 的帖子

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));
我是这样觉得的。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-6-27 22:04 , Processed in 0.064567 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表