我正在尝试在Matlab中编写Newton Raphson方法,但首先我必须找到函数的导数。我是Matlab的新手,我没有得到我需要的结果。我尝试了不同的方法,但没有任何帮助,我想我没有得到我想要的结果,因为我不熟悉Matlab语法。这是我的代码:
1)首先,我将我的函数放在一个名为fun1.m
的文件中function y = fun1(x)
y = exp(x) - 2*x - 2;
2)然后我转到我的另一个文件,我尝试编写Newton Raphson方法
%my bounds
low = 0;
high = 3;
%my initial guess will be determined from product of the function of the file fun1.m and the derivative of that function for the boundaries that i've given. If one of the products is greater then zero than this value will be my first guess. This is what I wrote
f = fun1(x);
f1 = diff(f);
f2 = diff(f,2);
%As a result if I put out the semicolons I get f1 = 0 and f2 = 0
%I want to compute these products
prod1 = f(low) * diff(f(low))
prod2 = f(high) * diff(f(high))
我该如何继续这个?我也尝试过文件句柄,因此在区分之后我得到了[]。它也没有必要在另一个文件中使用该函数,但是因为我必须使用相同的函数做3个方法,我认为从文件中获取函数而不是每次都写它是更好的。那么我该如何获得该函数并将低值和高值区分开来呢?
答案 0 :(得分:0)
在步骤f=fun1(x)
之后,f将只是位置x处的f的值。现在diff
将尝试计算向量元素之间的差异。由于您在f中只有一个值,diff
将返回[]
。
如果您有MATLAB Symbolic Toolbox,则可以计算符号导数。请注意,这些函数仍称为diff
,但它们是不同的函数!有关详细信息,请比较MATLAB Diff和Symbolic Diff函数的帮助页。
syms x
f = exp(x) - 2*x - 2;
df = diff(f);
ddf = diff(df);
然后,您可以在所需的点评估这些功能
prod1 = subs(f,x,low) * subs(df,x,low);
prod2 = subs(f,x,high) * subs(df,x,low);
现在prod1
和prod2
仍然是符号数字而非“正常”双值。在此示例中,prod1=1
和prod2=8-exp(3)
。要将数字转换为double,只需
p1 = double(prod1);
p2 = double(prod2);