求解第三个变量的双积分方程

时间:2017-04-14 14:09:42

标签: matlab double equation integral

我一直试图在matlab中为第三个变量求解双积分方程。

一个例子:

首先,我试图象征性地解决它(当k = 1时),如下所示:

nop

代码给出正确答案,即当k = 1时h = 2/3。

然而,对于我的真正问题,函数F和f要复杂得多。当我使用复杂的F和f应用上面相同的代码时,matlab并没有在适当的时间内解决它。实际上我不知道它是否曾经解决过 - 我让代码运行了30分钟并迫使它终止。我将不得不继续这条路线,但就目前而言,我试图用数字来解决它。下面的代码是我尝试过的:

syms x y h
F = @(x,y,h) 2*x*y+4*h; 
f = @(x) x/2;
solve(int(int(F(x,y,h)*f(x),x,0,3)*f(y),y,0,1)-3, h)

为什么这段代码给出了0.5833的错误答案?

1 个答案:

答案 0 :(得分:0)

来自integral的文档:

  

对于标量值问题,函数Y = FUN(X)必须接受向量       参数X并返回向量结果Y,即被积函数       在X的每个元素进行评估。对于数组值问题(参见       'ArrayValued'以下FUN选项integral必须接受标量并返回       价值数组。

因为您正在嵌套对g1的调用,所以外部积分将向量传递到内部调用中。要解决此问题,内部整数g1 = @(y,h)integral(@(x)F1(x,y,h).*f1(x),0,3,'ArrayValued',true) 必须配置为对标量进行操作:

2/3

代码现在将以浮点返回fsolve。您应该使用fzero而不是public void CopyFileContentToLog() { var document = ReadByLine(); WriteToFile(document); } public IEnumerable<string> ReadByLine() { string line; using(StreamReader reader = File.OpenText(...)) while ((line = reader.ReadLine()) != null) yield return line; } public void WriteToFile(IEnumerable<string> contents) { using(StreamWriter writer = new StreamWriter(...)) { foreach(var line in contents) writer.WriteLine(line); writer.Flush(); } } 来解决此单变量根发现问题。