how to evaluate a symbolic function in matlab

26 ビュー (過去 30 日間)
Kamuran
Kamuran 2013 年 2 月 11 日
コメント済み: vikas singh 2023 年 3 月 12 日
Hi,
I am trying to automate my code to get the derivative of a function an evaluate that in given points. For example,
syms x
func=cos((pi*x)^4);
RHS=diff(func,x,2);
% RHS will be ==> - 16*pi^8*x^6*cos(pi^4*x^4) - 12*pi^4*x^2*sin(pi^4*x^4)
x=[ -1
-0.978147600733806
-0.913545457642601
-0.809016994374947
-0.669130606358858
-0.5
-0.309016994374947
-0.104528463267653
0.104528463267653
0.309016994374947
0.5
0.669130606358858
0.809016994374947
0.913545457642601
0.978147600733806
1]
and I want RHS and Func in those z values as a vector.
I appreciate the help. Thank you.

回答 (4 件)

ChristianW
ChristianW 2013 年 2 月 11 日
  • doc subs
  • doc subexpr

Youssef  Khmou
Youssef Khmou 2013 年 2 月 11 日
hi, you can use function_handle :
func=@(x) cos((pi*x).^4)
x=0:100; % example of vector x .
RHS=diff(func(x),2);
  8 件のコメント
Youssef  Khmou
Youssef Khmou 2013 年 2 月 12 日
編集済み: Youssef Khmou 2013 年 2 月 12 日
Well in this case you have to add diff(x) as DENOMINATOR :
Given your x :
func=@(x) x.^3;
f=x.^3;
df2=6.*x;
df2(1)=[];
d1=diff(func(x))./diff(x);
RHS=diff(d1)./diff(x(1:end-1));
figure, plot(df2), hold on, plot(RHS,'r')
legend(' numerical d²f',' diff(function_handle,2)')
you have to increase the Sample Rate in x to get better approximation .
Brian B
Brian B 2013 年 2 月 12 日
編集済み: Brian B 2013 年 2 月 12 日
Hi Youssef,
I'm not saying your solution is not valid. I was simply pointing out that the original question refers to symbolic calculation of an exact derivative. It is possible to evaluate the symbolic expression at any arbitrary set of points, without regard to interval size or ordering. That is what the subs command does, to which ChristianW referred. See my answer below.
regards,
Brian

サインインしてコメントする。


Youssef  Khmou
Youssef Khmou 2013 年 2 月 12 日
編集済み: Youssef Khmou 2013 年 2 月 12 日
Kamuran, to get better approximation you need to increase the sample rate in x and interpolate :
x=[ -1
-0.978147600733806
-0.913545457642601
-0.809016994374947
-0.669130606358858
-0.5
-0.309016994374947
-0.104528463267653
0.104528463267653
0.309016994374947
0.5
0.669130606358858
0.809016994374947
0.913545457642601
0.978147600733806
1];
x=x';
x=interp(x,5); % Example
func=@(x) x.^3;
f=x.^3;
df2=6.*x;
df2(1)=[];
d1=diff(func(x))./diff(x);
RHS=diff(d1)./diff(x(1:end-1));
figure, plot(df2), hold on, plot(RHS,'r')
legend(' numerical d²f',' diff(function_handle,2)')
Compare this result with the one given in the Comment with original x, there is an enhancement .
I hope that helps

Brian B
Brian B 2013 年 2 月 12 日
syms x
func=cos((pi*x)^4);
RHS=diff(func,x,2);
xx=-1:0.1:1;
d2f = subs(RHS, xx)
  2 件のコメント
Youssef  Khmou
Youssef Khmou 2013 年 2 月 13 日
right , that works better with "subs" function .
vikas singh
vikas singh 2023 年 3 月 12 日
if I have function of two variable suppose x and t and I have to evaluate it on x=0:100:10000 and t= 0,1,5,10 15. how to do. suppose the fucnction is F(x,t)=sin(x)*exp(t)

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeOperators and Elementary Operations についてさらに検索

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by