24小时热门版块排行榜    

查看: 580  |  回复: 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 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 求调剂,一志愿:南京航空航天大学大学 ,080500材料科学与工程学硕,总分289分 +5 @taotao 2026-03-19 5/250 2026-03-24 21:07 by greychen00
[考研] 【考研调剂】化学专业 281分,一志愿四川大学,诚心求调剂 +15 吃吃吃才有意义 2026-03-19 16/800 2026-03-24 19:51 by 了了了了。。
[考研] 0854 考研调剂 招生了!AI 方向 +5 pk3725069 2026-03-19 17/850 2026-03-24 17:30 by zhouxuan..
[考研] 一志愿华东理工大学081700,初试分数271 +5 kotoko_ik 2026-03-23 6/300 2026-03-24 10:29 by 学术搬砖er
[考研] 一志愿河北工业大学0817化工278分求调剂 +7 jhybd 2026-03-23 12/600 2026-03-24 09:03 by jhybd
[考研] 276求调剂。有半年电池和半年高分子实习经历 +9 材料学257求调剂 2026-03-23 10/500 2026-03-24 07:36 by wangy0907
[考研] 一志愿北京化工大学 070300 学硕 336分 求调剂 +7 vv迷 2026-03-22 7/350 2026-03-23 23:44 by Txy@872106
[考研] 335分 | 材料与化工专硕 | GPA 4.07 | 有科研经历 +4 cccchenso 2026-03-23 4/200 2026-03-23 23:00 by 徐ckkk
[考研] 384求调剂 +3 子系博 2026-03-22 6/300 2026-03-23 21:45 by 子系博
[论文投稿] 急发核心期刊论文 +3 贤达问津 2026-03-23 5/250 2026-03-23 17:13 by 妹子不好惹
[考研] 0854电子信息求调剂 324 +3 Promise-jyl 2026-03-23 3/150 2026-03-23 13:43 by wangkm
[考研] 材料与化工085600,总分304,本科有两篇sci参与,求调剂 +4 幸运的酱酱 2026-03-22 5/250 2026-03-22 20:15 by edmund7
[考研] 289材料与化工(085600)B区求调剂 +3 这么名字咋样 2026-03-22 4/200 2026-03-22 17:56 by 云民大李老师
[考研] 一志愿北京化工大学070300 学硕336求调剂 +5 vv迷 2026-03-21 8/400 2026-03-22 14:20 by ColorlessPI
[考研] 285求调剂 +6 ytter 2026-03-22 6/300 2026-03-22 12:09 by 星空星月
[考研] 354求调剂 +7 Tyoumou 2026-03-18 10/500 2026-03-22 11:11 by 人来盛
[考研] 085600材料与化工306 +4 z1z2z3879 2026-03-21 4/200 2026-03-21 23:44 by ms629
[考研] 313求调剂 +4 肆叁贰壹22 2026-03-19 4/200 2026-03-21 17:33 by ColorlessPI
[考研] 一志愿西南交大,求调剂 +5 材化逐梦人 2026-03-18 5/250 2026-03-21 00:26 by JourneyLucky
[考研] 0817 化学工程 299分求调剂 有科研经历 有二区文章 +22 rare12345 2026-03-18 22/1100 2026-03-20 20:39 by zhukairuo
信息提示
请填处理意见