| 查看: 572 | 回复: 4 | |||||
liaoliao8545新虫 (小有名气)
|
[求助]
matlab问题
|
|
具体是:我要解一个非线性方程,方程中包含了一些参数,这些参数的值需要通过主程序提供。 例如:我要求解方程:ax+b/x+c=0的解,其中参数a、b、c的值必须由主程序计算得出,我变了一个子程序,通过主程序调用来解方程(当然实际程序要复杂得多): 子程序: function f=fz(x) f=a.*x+b./x+c; 主程序在命令窗口输入: a=1;b=2;c=3; x=fzero('fz',-5) 运行后总是出现如下错误提示: ??? Error using ==> fzero FZERO cannot continue because user supplied function_handle ==> fz failed with the error below. Undefined function or variable 'a'. 但如果我将参数a=1;b=2;c=3;移到子程序中,变为: 子程序: function f=fz(x) a=1;b=2;c=3; f=a.*x+b./x+c; 主程序在命令窗口输入: x=fzero('fz',-5) 运行结果正常:x = -2.0000 我现在存在的问题是参数a、b、c的值是由其它程序计算而来,不可能在子程序中输入,请问怎样将参数a、b、c的值传递到子程序?或者采用其它的解非线性方程的办法? |
» 猜你喜欢
求标准粉末衍射卡号 ICDD 01-076-1802
已经有0人回复
新西兰Robinson研究所招收全奖PhD
已经有0人回复
物理学I论文润色/翻译怎么收费?
已经有76人回复
石墨烯转移--二氧化硅衬底石墨烯
已经有0人回复
笼目材料中量子自旋液体基态的证据
已经有0人回复
数学教学论硕士可以读数学物理博士吗?
已经有0人回复
德国亥姆霍兹Hereon中心汉堡分部招镁合金腐蚀裂变SCC课题方向2026公派博士生
已经有4人回复
澳门大学 应用物理及材料工程研究院 潘晖教授课题组诚招博士后
已经有11人回复
求助NH4V4O10晶体的CIF文件
已经有0人回复
英国全奖博士招聘-深度学习与量子物理
已经有0人回复
间接带隙半导体有效质量求助
已经有0人回复
月只蓝
主管区长 (职业作家)
-

专家经验: +1059 - 计算强帖: 8
- 应助: 1712 (讲师)
- 贵宾: 8.888
- 金币: 68123.7
- 散金: 1938
- 红花: 443
- 沙发: 4
- 帖子: 4373
- 在线: 3291.4小时
- 虫号: 1122189
- 注册: 2010-10-14
- 专业: 宇宙学
- 管辖: 计算模拟区
★ ★
csgt0: 金币+2, 谢谢 2013-05-14 15:41:37
csgt0: 金币+2, 谢谢 2013-05-14 15:41:37
|
以下m文件,直接复制进一个m文件中,运行即会在主窗口等待你输入a,b,c的数值。结果见附图1。 function solvenole314 clear all;clc global a b c format long a=input('请输入a='); b=input('请输入b='); c=input('请输入c='); x= fzero(@fun314,[-5]) %-------------------------------- function y=fun314(x) global a b c y=a*x+b/x+c; 解方程组的情况,可参考http://muchong.com/bbs/viewthread.php?tid=5815452&authorid=1122189 附图1.jpg |

2楼2013-05-11 11:17:19
liaoliao8545
新虫 (小有名气)
- 应助: 0 (幼儿园)
- 金币: 213.5
- 沙发: 1
- 帖子: 197
- 在线: 45.8小时
- 虫号: 2119920
- 注册: 2012-11-11
- 专业: 燃烧学
|
有没有那种直接调用 不需要手动输入的方法 y1=input('输入:y1='); y2=input('输入:y2='); y3=input('输入:y3='); q=input('输入:q='); T0=input('输入:T0='); P=input('输入:P='); %下面求Kp T=[298 500 1000 1500 1800 2000 2200 2400 2500 2600 2800 3000 3200 3500 4000 4500 5000]; Kp10=[-45.066 -25.025 -10.221 -5.316 -3.698 -2.884 -2.226 -1.679 -1.44 -1.219 -0.825 -0.485 -0.189 0.19 0.692 1.079 1.386]; Kp20=[-40.018 -22.886 -10.062 -5.725 -4.270 -3.540 -2.942 -2.442 -2.224 -2.021 -1.658 -1.343 -1.067 -0.712 -0.238 0.133 0.430]; Kp30=[-46.181 -26.208 -11.322 -6.314 -4.638 -3.799 -3.113 -2.541 -2.158 -2.057 -1.642 -1.282 -0.967 -0.563 -0.025 0.394 0.728]; Kp40=[-71.224 -40.316 -17.292 -9.512 -6.896 -5.580 -4.502 -3.600 -3.202 -2.834 -2.718 -1.606 -1.106 -0.462 0.402 1.074 1.612]; Kp50=[-81.208 -45.890 -19.614 -10.790 -7.836 -6.356 -5.142 -4.130 -3.684 -3.272 -2.536 -1.898 -1.340 -0.620 0.340 1.086 1.636]; Kp60=[-15.171 -8.783 -4.062 -2.487 -1.962 -1.699 -1.484 -1.305 -1.227 -1.154 -1.025 -0.913 -0.815 -0.690 -0.524 -0.397 0.296]; Kp1=interp1(T,Kp10,T0,'cubic');Kp1=10^Kp1; Kp2=interp1(T,Kp20,T0,'cubic');Kp2=10^Kp2; Kp3=interp1(T,Kp30,T0,'cubic') ;Kp3=10^Kp3; Kp4=interp1(T,Kp40,T0,'cubic');Kp4=10^Kp4; Kp5=interp1(T,Kp50,T0,'cubic');Kp5=10^Kp5; Kp6=interp1(T,Kp60,T0,'cubic');Kp6=10^Kp6; C1=sqrt(P)/Kp1; C2=sqrt(P)/Kp2; C7=Kp3/sqrt(P); C6=P/Kp4; C3=P/Kp5; C10=Kp6; n=y1+y3; m=4*y1; l=2*y3; k=2*y2; r0=(1/q)*(n+m/4-l/2); r=l/2+r0; r1=k/2+3.76*r0; if q<1.0 x11=1/(1+m/4+r1) else x11=1/(n+m/4+r1) end 上面程序求出参数x11 C1 C2 n m r 的值 接下来求x3 是以下方程的正根 fx=2*x/x11+(2*C1*n*sqrt(x)+n)/(1+C1*sqrt(x))+C2*m*sqrt(x)/(2*(1+C2*sqrt(x)))-2*r; 怎么直接调用上面程序求出的参数值 (不是你说的那种手动输入) |
3楼2013-05-11 16:19:42
月只蓝
主管区长 (职业作家)
-

专家经验: +1059 - 计算强帖: 8
- 应助: 1712 (讲师)
- 贵宾: 8.888
- 金币: 68123.7
- 散金: 1938
- 红花: 443
- 沙发: 4
- 帖子: 4373
- 在线: 3291.4小时
- 虫号: 1122189
- 注册: 2010-10-14
- 专业: 宇宙学
- 管辖: 计算模拟区

4楼2013-05-11 16:37:38
liaoliao8545
新虫 (小有名气)
- 应助: 0 (幼儿园)
- 金币: 213.5
- 沙发: 1
- 帖子: 197
- 在线: 45.8小时
- 虫号: 2119920
- 注册: 2012-11-11
- 专业: 燃烧学
5楼2013-05-11 17:37:52











回复此楼