声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1478|回复: 12

[编程技巧] 请教在循环中五次方程如何求啊。在线等哦

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

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

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

x
我做的是 一个循环,比方说

for delta=[0.01:0.01:20];
  ep, b1,c1,a, b, c2 都是 delta的函数,所以每次循环都有一个确定的值。k是常数。
  现在的问题是,对于这样一个方程:
ep/sqrt(i2)+(b1*i2+c1)/(a*i2^2+b*i2+c2)-k=0
怎么在每次循环中给出Ii2的值呢
后面还有一些参数再用到这个i2的值。
最后要画的是i2的一个函数的图。f(i2)=a*i2+b*i2^5+c...,
其中,a,b,c也是delta的函数,每次循环有不同的值。

end

谢谢大家能给一个建议!:loveliness:

[ 本帖最后由 snowfish 于 2008-11-7 16:51 编辑 ]
回复
分享到:

使用道具 举报

 楼主| 发表于 2008-11-7 09:38 | 显示全部楼层
??? Error using ==> solve
Error, (in allvalues/rootseq) cannot evaluate with symbolic coefficients
发表于 2008-11-7 10:07 | 显示全部楼层
help fzero
帮助文档里再搜索 anonymous function
或者nested function
把这两个东东相关文档仔细看下。你这个问题就解决了。
即fzero+匿名函数结构
或者fzero+nested function结构都能解决

[ 本帖最后由 rocwoods 于 2008-11-7 10:08 编辑 ]

评分

1

查看全部评分

 楼主| 发表于 2008-11-7 10:54 | 显示全部楼层
还是不会啊,呵呵,能否明示一下啊::@L
k=0.01;
count_1=0;
for delta=[0.01:0.01:5];
x=delta;  
B1=3*x;
C1=2*x^2;
B2=3*x^4;
C2=5*x;
A=2*x;
B=x;
C=x;
ep=0.1*sqrt(x) ;

ep/sqrt(I2)+(B1*I2+C1)/(A*I2*I2+B2*I2+C2)-k=0 怎么求I2呢???

Y=I2
count_1=count_1+1;
Y0(count_1)=Y;
end
发表于 2008-11-7 15:32 | 显示全部楼层
用1stOpt一试,不知对否?:
LoopConstant x=[0.01:0.1:5];
Constant k=0.01;
ConstStr b1=3*x,C1=2*x^2,B2=3*x^4,C2=5*x,A=2*x,B=x,C=x,ep=0.1*sqrt(x);
PlotLoopData I2;
Function ep/sqrt(I2)+(B1*I2+C1)/(A*I2*I2+B2*I2+C2)-k=0;
66.jpg

评分

1

查看全部评分

 楼主| 发表于 2008-11-7 21:38 | 显示全部楼层
k=0.01;
count_1=0;
for delta=[0.01:0.1:2];
x=delta;  
B1=3*x;
C1=2*x^2;
B2=3*x^4;
C2=5*x;
A=2*x;
B=x;
C=x;
ep=0.1*sqrt(x) ;

u=inline('ep/sqrt(x)+(B1*x+C1)/(A*x^2+B*x+C2)-k','x','ep','B1','C1','A','B','C2','k');
I2=fzero(u,150,[],ep,B1,C1,A,B,C2,k)

Y=I2
count_1=count_1+1;
Y0(count_1)=Y;
end
plot(delta,Y0)

不知道这样写可以吗?但是我运行之后每次都是显示i2是nan,不知道什么问题,请高手能详细的指点下。。:loveliness:
发表于 2008-11-8 00:26 | 显示全部楼层

  1. function snowfish
  2. k=0.01;
  3. count_1=1;

  4.     function u = snowfish_nested(I2)
  5.         B1=3*delta;
  6.         C1=2*delta^2;
  7.         B2=3*delta^4;
  8.         C2=5*delta;
  9.         A=2*delta;
  10.         B=delta;
  11.         C=delta;
  12.         ep=0.1*sqrt(delta) ;
  13.         u = ep/sqrt(I2)+(B1*I2+C1)/(A*I2*I2+B2*I2+C2)-k;
  14.     end

  15. Y = zeros(length(0.01:0.01:2),1);
  16. for delta=0.01:0.01:2;
  17. Y(count_1) = fzero(@snowfish_nested,300);
  18. count_1=count_1+1;
  19. end
  20. plot(0.01:0.01:2,Y,'*-')
  21. end
复制代码
保存,运行snowfish试试看

评分

1

查看全部评分

 楼主| 发表于 2008-11-8 09:37 | 显示全部楼层
:@L 虽然没能运行,但是还是非常感谢!!!:loveliness:
发表于 2008-11-8 10:11 | 显示全部楼层
ls的,你是什么版本,那个可以运行
untitled.jpg
 楼主| 发表于 2008-11-8 10:25 | 显示全部楼层
谢谢大家,我的问题解决了,用inline函数就可以了,可能我的变量取的不合适,才导致出现nan的情况。。:lol :lol :lol
 楼主| 发表于 2008-11-8 10:26 | 显示全部楼层
6.5的,是不是版本太低了啊?:@L
发表于 2008-11-8 11:02 | 显示全部楼层
是比较低。虽然6.5很经典,毕竟是6年前的版本了。这几年,MATLAB推出很多新的结构和功能。比如说匿名函数和nested function就是其中代表。匿名函数的调用效率比内联函数高的多。
譬如以我的电脑为例:
CPU扣肉T8100,2G内存,MATLAB2008a:

  1. clear
  2. >> f = @(x) sin(x);
  3. g = inline('sin(x)');
  4. tic;for k = 1:100000
  5. a = f(k);
  6. end;toc
  7. tic;for k = 1:100000
  8. a = g(k);
  9. end;toc
  10. Elapsed time is 0.070580 seconds.
  11. Elapsed time is 17.550051 seconds.
复制代码
分别构造匿名的sin(x)和内联的sin(x)函数,然后对其调用10万次。时间相差200多倍!当然,MATLAB的buit-in函数,像sin,cos,log,exp,+,-*-等等调用是最快的。

  1. tic;for k = 1:100000
  2. a = sin(k);
  3. end;toc
  4. Elapsed time is 0.007112 seconds.
复制代码

[ 本帖最后由 rocwoods 于 2008-11-8 11:06 编辑 ]

评分

1

查看全部评分

 楼主| 发表于 2008-11-8 11:44 | 显示全部楼层
:lol 看来我很落后啊,呵呵,换个7.0的试哈:lol
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-9-23 01:34 , Processed in 0.062646 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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