传递函数用fsolve求解积分方程

时间:2014-01-15 03:02:53

标签: matlab

我正在尝试解决形式

的积分方程
              Integrate[f(x)*g(x,w),dx]
Solve for w:  ------------------------  =  0.5
                 Integrate[f(x),dx]

其中有一定的限制(数值积分)。

在这个和mathworks网站上搜索我发现了一些使用函数函数来完成它的代码。我遇到了一些问题:

目前的代码是(测试的简化方程式):

function [bfound]=testingSolveIntegral

options = optimset('MaxFunEvals',50);
bfound = fsolve(@func2minimize,[1 2 3],options); %testing start points at 1,2,3

  function output = func2minimize(w)
      t0 = -1;
      t1 = 1;
      L = 0.5;
      output = (L - (integral(@myFunc,t0,t1,'ArrayValued',true,'RelTol',1e-30,'AbsTol',1e-30)./integral(@myFunc2,t0,t1,'ArrayValued',true,'RelTol',1e-30,'AbsTol',1e-30)));

      function f = myFunc(muu)
          f = B.*muu.^2*(w.*muu.^2);
      end

      function f2 = myFunc2(muu)
          f2 = B.*muu^2;
      end
  end
end

这非常有效,但我想要做的是在循环中针对不同的B值求解这些方程,例如,B = 1:1:100。我在这段代码中尝试了一些东西,但只得到错误。

我是否需要从一个指示B循环的外部脚本调用此函数?

我还想在这个外部脚本中定义我的函数,例如:

func = @(muu) B.*muu.^2*(w.*muu.^2);
func2 = @(muu) B.*muu^2;
for B = 1:1:100
testingSolveIntegral(func,func2,B)

我已经尝试了一些东西,但是在这个地方飞来飞去的大量功能中迷失了。非常感谢有关如何设置此类脚本的帮助。 感谢

1 个答案:

答案 0 :(得分:0)

integral doc页面告诉您如何执行此任务(“集成参数化函数”部分)。

首先使用与参数/变量一样多的参数定义函数fg。例如,定义:

g = @(muu,w) muu.^2*(w.*muu.^2);
f = @(muu) muu.^2;

然后使用匿名函数调用integral,该函数修复参数的值:

for w=1:100
    q(w) = integral(@(x) g(x,w).*f(x),bmin, bmax)./integral(f,bmin, bmax);
end