24小时热门版块排行榜    

查看: 687  |  回复: 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的值传递到子程序?或者采用其它的解非线性方程的办法?
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

月只蓝

主管区长 (职业作家)

★ ★
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

MATLAB、MS小问题、普通问题请发帖求助!时间精力有限,恕不接受无偿私信求助。
2楼2013-05-11 11:17:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

liaoliao8545

新虫 (小有名气)

引用回帖:
2楼: Originally posted by 月只蓝 at 2013-05-11 11:17:19
以下m文件,直接复制进一个m文件中,运行即会在主窗口等待你输入a,b,c的数值。结果见附图1。

function solvenole314
clear all;clc
global a b c
format long

a=input('请输入a=');
b=input('请输入b=' ...

有没有那种直接调用  不需要手动输入的方法
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
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

月只蓝

主管区长 (职业作家)

那就不用a=input('请输入a='); b=input('请输入b=');c=input('请输入c=')了,把计算a,b,c的程序加进来即可。
MATLAB、MS小问题、普通问题请发帖求助!时间精力有限,恕不接受无偿私信求助。
4楼2013-05-11 16:37:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

liaoliao8545

新虫 (小有名气)

引用回帖:
4楼: Originally posted by 月只蓝 at 2013-05-11 16:37:38
那就不用a=input('请输入a='); b=input('请输入b=');c=input('请输入c=')了,把计算a,b,c的程序加进来即可。

就是把变量定义成全局变量就可以了   终于解决了 非常感谢
5楼2013-05-11 17:37:52
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 liaoliao8545 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考博] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +3 jCd0dEvKHShX 2026-08-29 4/200 2026-08-30 03:26 by ZPa0EcMwuECS
[论文投稿] 售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急 +5 gy1nBQXYQJqL 2026-08-29 6/300 2026-08-30 01:58 by ZPa0EcMwuECS
[硕博家园] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 +4 gy1nBQXYQJqL 2026-08-29 4/200 2026-08-30 01:49 by ZPa0EcMwuECS
[公派出国] 售SCI一区T0P文章,我:8.O.55.1.O54,科目全,可伽急 +4 gy1nBQXYQJqL 2026-08-29 7/350 2026-08-30 01:36 by ZPa0EcMwuECS
[考博] 售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +3 gy1nBQXYQJqL 2026-08-29 4/200 2026-08-30 01:34 by ZPa0EcMwuECS
[考博] 售SCI一区T0P文章,我:8.O.55.1.O54,科目全,可伽急 +6 ASdOkHsho7FD 2026-08-28 9/450 2026-08-30 01:04 by ZPa0EcMwuECS
[基金申请] 投票:  有多少人是今天查系统知道结果的? +16 爱看书的可乐 2026-08-26 18/900 2026-08-30 00:59 by winsaint
[找工作] 售SCI文章,我:8O5.5.1.O.54,科目齐全,可+急 +5 ASdOkHsho7FD 2026-08-28 7/350 2026-08-30 00:52 by ZPa0EcMwuECS
[考研] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +7 ASdOkHsho7FD 2026-08-28 10/500 2026-08-30 00:41 by ZPa0EcMwuECS
[教师之家] 导师吐槽:我怎么摊上了这么个极品研究生! +9 苏东坡二世 2026-08-23 9/450 2026-08-29 14:41 by hustersqt
[教师之家] 售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +4 ASdOkHsho7FD 2026-08-28 7/350 2026-08-29 09:26 by G6APbkg8SA6w
[基金申请] 2026年叶企孙基金 +4 bud_bud 2026-08-27 7/350 2026-08-29 07:23 by foolishmani
[基金申请] 基金未中,这种答复是模板吗? +5 zhaosm1982 2026-08-27 6/300 2026-08-27 16:00 by lfy8008
[基金申请] 看板上这么多中的,有点像50人群里49个人都是骗子的那种感觉…… +5 a089 2026-08-26 6/300 2026-08-27 14:05 by jonewore
[基金申请] 2026年8月25日国自然放榜前突然收到列入评审专家邮件,有关系吗? +25 木水思豆 2026-08-25 28/1400 2026-08-26 14:53 by draco1987
[基金申请] 能否退出参与的面上项目解除限项 +23 koalala 2026-08-24 26/1300 2026-08-26 14:29 by 宝贝虫子
[基金申请] 国合里面能看到了 +7 一怀馨秋 2026-08-26 7/350 2026-08-26 11:23 by zhaosm1982
[基金申请] 国合现在查不到了吗? +10 chengyan1220 2026-08-24 20/1000 2026-08-26 08:57 by peasantsprig
[基金申请] 牛来!米来!面来! +8 beefly 2026-08-26 8/400 2026-08-26 08:37 by xuzhipiao
[基金申请] 某些机构,以效率低为荣,以效率低作为存在感 +9 yuleib84 2026-08-25 10/500 2026-08-25 17:14 by alexon
信息提示
请填处理意见