24小时热门版块排行榜    

查看: 1184  |  回复: 10
当前主题已经存档。
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

dxyhn1979

银虫 (小有名气)

[交流] 【求助】如何循环解方程

求教:
      在一个M文件中求得的一个符号表达式,如何载入到另一个M文件中定义为一个可以数值求解的函数,并在前一个M文件中调用此函数并对其求解?
自己编的具体的程序如下:请各位路过的大内高手给修改一下啊。

M文件一。
clear
syms x   m   n   h   alpha_m     beta_m    alpha_n    beta_n    alpha_h    beta_h... Gna   Gk    Gl    Ena     Ek    El   I ;%定义的符号变量

alpha_m=0.1*(x+40)/(1-exp(-(x+40)/10));    %================
alpha_n=0.01*(x+55)/(1-exp(-(x+55)/10));   %
alpha_h=0.07*exp(-(x+65)/20);                     %
                                                                       %
beta_m=4*exp(-(x+65)/18);                          %
beta_n=0.125*exp(-(x+65)/80);                    %九个符号表达式
beta_h=1/(1+exp(-(x+35)/10));   
                                                                       %
m=alpha_m/(alpha_m+beta_m);                    %
n=alpha_n/(alpha_n+beta_n);                        %
h=alpha_h/(alpha_h+beta_h);                        % ===================

f=I-Gna*m^3*h*(x-Ena)-Gk*n^4*(x-Ek)-Gl*(x-El); %  最终的符号表达式
I=[1:100];   
for i=1:100  
  d=I(i);
  g(i)=subs(f,{Gna  Gk  Gl  Ena  Ek  El  I},[120 36 0.3 57 -77 -54.4 d]);
          % g(i)中的Gna    Gk    Gl    Ena   Ek   El     I是符号常量,用具体的数值替代
  save g;%每次循环得到的g(i)都保存下来,用以载入到M文件二中,并在此文件中
             %调用求解
   [x,F]=fsolve('HHfsolve',-50)   %解非线性方程,x的初值取-50,求其零点及其
                                                % 在零点的函数值
end
以上程序每个循环求出一个g。

M文件二。建立函数
function F=HHfsolve(x)    %定义的函数F,这是另外建的一个M文件。
load g;        
F=g(i);    %使用的g(i)是M文件一中每次循环求得的g(i)
载入的是符号方程,此function 是不接受的,如何叫其接受?
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dxyhn1979

银虫 (小有名气)

再次请教

谢谢高手帮我改的程序啊,但是有几个问题还需请教。
问题1:
我运行你的程序,为什么显示:
??? Error: File: D:\MATLAB6p1\work\uuuu.m Line: 10 Column: 40
"identifier" expected, "(" found.
我用的是Matlab6.1的版本。我把@改成  ‘  ’也不行。是版本的问题么?怎么修改?
问题二:
为什么要设置退出标志exitflag?
问题三:
[x(i),fval(i),exitflag(i)]=fsolve(@(x)myfun(x,I(i)),-50)这行中@后面紧跟的(x)是什么意思?(x)与后面的函数名myfun是什么关系?@后面不是应该跟函数名么?
4楼2009-10-16 08:40:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dxyhn1979

银虫 (小有名气)

改过后成功运行了。呵呵。
还有一个问题。
fsolve是不是只可以对函数求解一个零点啊?文献中求解得到的是三个零点。
如何求出函数所有的零点呢(如果函数有不止一个零点的话)?
6楼2009-10-16 09:48:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dxyhn1979

银虫 (小有名气)

★
nono2009(金币+1,VIP+0):谢谢交流!欢迎常来。 10-16 12:13
解析法solve可以解出所有的零点。但是数值法fsolve只能解出给定的初值附近的一个零点,要解所有零点的话,除非知道各个零点的大概位置,然后给定一个初值的数组,再求解。例如:
fsolve('x.^3-8*x.^2+x+10',[-1.5 1.5 8]) %可求三个零点。
fsolve('x.^3-8*x.^2+x+10', 8)%只能求一个零点
但是
solve(sym('x^3-8*x^2+x+10'))%可求所有的零点,解析解

问题:
有没有办法在不知道函数零点个数和分布的情况下,用fsolve求所有的零点呢?
8楼2009-10-16 11:08:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 dxyhn1979 的主题更新
普通表情 龙 兔 虎 猫 高级回复 (可上传附件)
信息提示
请填处理意见