24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1737  |  回复: 11

klding

新虫 (小有名气)

[求助] 牛顿迭代解方程画曲线已有2人参与

最近需根据一个方程计算用matlab来画一个图,但是总是不出结果,在此向大家求助。
方程如下图,方程中有3个符号变量,其中a和C0是通过前面的数值计算计算出来的,然后在a为某一值时,做出C0-Cw曲线。这里希望就是对a一定时,C0=0.1:0.1:10,分别求出对应的Cw的各个数据,而不是利用隐函数ezplot()来画图,如下图所示。
我现在编的若已知a和Co求Cw的话,可以做出来这单个的一组,但是一旦来做这条曲线时就怎么弄都弄不出来。希望大家帮忙看一下,指点一二(后面赋有一个matlab文件)。

牛顿迭代解方程画曲线
公式.png


牛顿迭代解方程画曲线-1
曲线.jpg
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
回帖支持 ( 显示支持度最高的前 50 名 )

bluesine

铁杆木虫 (职业作家)

科苑小木虫

【答案】应助回帖

感谢参与,应助指数 +1
把你的程序稍微改动了一下,不多说,看code:

clear; clc;
a=0.6;
syms Cw Cw0;

C=0.1;
i=1;
while C<=10

f=Cw-1/(1-a^4)*(4/pi*(1/3*(2.5-1/(Cw+C)^2)*(1-1/(Cw+C)^2)^0.5+(Cw+C)/2*asin(1/(Cw+C)))-a^4*(Cw+C));%%牛顿迭代形式
df=diff(f,Cw);
eps=1e-7;
Cw0=10.0;
cnt=0;
MAXCNT=200; %最大循环次数

while cnt<MAXCNT      %防止无限循环
    Cw1=Cw0-subs(f,Cw,Cw0)/subs(df,Cw,Cw0); %去掉这个分号,可以看到迭代过程。
     if (abs(Cw1-Cw0)<eps)         
      break;
    end
    Cw0=Cw1;
    cnt=cnt+1;
end
error=abs(Cw1-Cw0)/2;  %%误差
if cnt==MAXCNT || error > eps
    disp(['不收敛@C=',num2str(C)]);
    continue;
end

Y(i) =Cw0;
i=  i+1;
C = C+0.1;
end

X = 0.1:0.1:10;
plot(X,Y,'r','LineWidth',2);
xlabel('{\itC}_0');
ylabel('{\itC}_w');
disp('done...')
板凳要做十年冷文章不发一个字
3楼2016-12-13 15:21:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

klding

新虫 (小有名气)

matlab程序。

» 本帖附件资源列表

  • 欢迎监督和反馈:小木虫仅提供交流平台,不对该内容负责。
    本内容由用户自主发布,如果其内容涉及到知识产权问题,其责任在于用户本人,如对版权有异议,请联系邮箱:xiaomuchong@tal.com
  • 附件 1 : SHIYAN.m
  • 2016-12-12 10:19:40, 1.03 K
2楼2016-12-12 10:22:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

klding

新虫 (小有名气)

引用回帖:
3楼: Originally posted by bluesine at 2016-12-13 15:21:16
把你的程序稍微改动了一下,不多说,看code:

clear; clc;
a=0.6;
syms Cw Cw0;

C=0.1;
i=1;
while C<=10

f=Cw-1/(1-a^4)*(4/pi*(1/3*(2.5-1/(Cw+C)^2)*(1-1/(Cw+C)^2)^0.5+(Cw+C)/2*asin(1 ...

你好,很感谢你。但是我把你的程序导进去后发现进入死循环了,停不下来啊
4楼2016-12-13 21:09:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

Sky青云

银虫 (小有名气)

青云志
5楼2016-12-13 21:20:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

bluesine

铁杆木虫 (职业作家)

科苑小木虫

【答案】应助回帖

引用回帖:
4楼: Originally posted by klding at 2016-12-13 21:09:49
你好,很感谢你。但是我把你的程序导进去后发现进入死循环了,停不下来啊...

并不是死循环,具体看电脑配置。。因为没有输出中间结果,需要等一会,我的大概在15秒左右出结果。看附件
牛顿迭代解方程画曲线-2
test.jpg

板凳要做十年冷文章不发一个字
6楼2016-12-14 09:21:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

klding

新虫 (小有名气)

引用回帖:
6楼: Originally posted by bluesine at 2016-12-14 09:21:57
并不是死循环,具体看电脑配置。。因为没有输出中间结果,需要等一会,我的大概在15秒左右出结果。看附件

test.jpg
...

你好,还是不行啊,我的电脑配置不低啊,i7-4790了,8G内存啊,现在都运行看10分钟了,还是没有出结果,我其他的程序都好着,就这个不行,现在好像matlab也卡死了。
应该还是程序问题吧。
7楼2016-12-14 09:45:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

bluesine

铁杆木虫 (职业作家)

科苑小木虫

引用回帖:
7楼: Originally posted by klding at 2016-12-14 09:45:51
你好,还是不行啊,我的电脑配置不低啊,i7-4790了,8G内存啊,现在都运行看10分钟了,还是没有出结果,我其他的程序都好着,就这个不行,现在好像matlab也卡死了。
应该还是程序问题吧。...

你把循环里面C=C+0.1的分号去掉,还有中间的Cw1后面的分号去掉,看看有没有结果
板凳要做十年冷文章不发一个字
8楼2016-12-14 11:36:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wurongjun

专家顾问 (职业作家)

【答案】应助回帖

感谢参与,应助指数 +1
Matlab的优势是数值计算!
不要使用syms命令最好!
否则很慢!
善恶到头终有报,人间正道是沧桑.
9楼2016-12-14 17:50:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

klding

新虫 (小有名气)

引用回帖:
8楼: Originally posted by bluesine at 2016-12-14 11:36:08
你把循环里面C=C+0.1的分号去掉,还有中间的Cw1后面的分号去掉,看看有没有结果...

我在2010版里面可以求解出来,但是在14版里面就不能求解出来。。。这是什么原因,10版的电脑配置远比14版的差啊。。。
10楼2016-12-14 21:16:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 klding 的主题更新
信息提示
请填处理意见