我一直试图在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的错误答案?
答案 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();
}
}
来解决此单变量根发现问题。