How can i plot an inline function?
이전 댓글 표시
I wrote a code in which i got and inline function as
U =
Inline function:
U(p,t,x) = (372863112183097.*exp(500.*x - 250.*t).*(sinh(1000.*sum(((-1).^p.*p.*exp(-(555609333788003.*p.^2.*t)./56294995342131200).*(exp(pi.*p.*x.*(-i)).*(i./2) + exp(pi.*p.*x.*i).*(-i./2)))./((1884165843459159.*(p.^2 - 1).^2)./1208925819614629174706176 + (5825986127860891.*p.^2)./73786976294838206464 + 73792802280966067355./73786976294838206464), p == 1.n)) + 7017961089264186343289723609432566477005855403012763273460273598821737866336338749326047126764570042716934574784489366662785827208940701722862252654770355689539991848141850896551869806913239102400648200731032287182848.*sum(((-1).^p.*cos(pi.*x.*(p + 1./2)).*exp(-(555609333788003.*t.*(p + 1./2).^2)./56294995342131200).*(2.*p + 1))./((5825986127860891.*p)./73786976294838206464 + (1884165843459159.*(4.*p + 4.*p.^2 - 3).^2)./19342813113834066795298816 + (5825986127860891.*p.^2)./73786976294838206464 + 295177035109992130311./295147905179352825856), p == 1.n)))./2361183241434822606848
now I want to plot this function against
x=-1:0.2:1, t=0:0.4:2, p=1:200
Someone please help me to write the plot command. Thanks
답변 (2개)
Star Strider
2019년 11월 4일
Use Anonymous Functions instead of inline objects, since inline objects are likely to be depricated soon.
There is a missing (multiplication?) operator, probably here (where the ↑ are):
U = @(p,t,x) (372863112183097.*exp(500.*x - 250.*t).*(sinh(1000.*sum(((-1).^p.*p.*exp(-(555609333788003.*p.^2.*t)./56294995342131200).*(exp(pi.*p.*x.*(-i)).*(i./2) + exp(pi.*p.*x.*i).*(-i./2)))./((1884165843459159.*(p.^2 - 1).^2)./1208925819614629174706176 + (5825986127860891.*p.^2)./73786976294838206464 + 73792802280966067355./73786976294838206464), p == 1.n)) + 7017961089264186343289723609432566477005855403012763273460273598821737866336338749326047126764570042716934574784489366662785827208940701722862252654770355689539991848141850896551869806913239102400648200731032287182848.*sum(((-1).^p.*cos(pi.*x.*(p + 1./2)).*exp(-(555609333788003.*t.*(p + 1./2).^2)./56294995342131200).*(2.*p + 1))./((5825986127860891.*p)./73786976294838206464 + (1884165843459159.*(4.*p + 4.*p.^2 - 3).^2)./19342813113834066795298816 + (5825986127860891.*p.^2)./73786976294838206464 + 295177035109992130311./295147905179352825856), p == 1.n)))./2361183241434822606848
↑ ↑
and likely several other problems, since this appears not to be completely valid MATLAB code.
Beyond that, when the ‘U’ function is repaired, calculate it with:
x = -1:0.2:1;
t = 0:0.4:2;
p = 1:200;
[X,T,P] = ndgrid(x, t, p);
Uz = U(P,T,X);
However, plotting it may be another problem, since the surface plot functions can only plot 2D matrices as the third argument, and ‘Uz’ (as I call it here) is a 3D matrix.
When ‘U’ is running successfully, we can talk about plotting it.
Adam Danz
2019년 11월 4일
As explained in the documentation, inline() will be removed in the future. Use anonymous functions instead.

Here's the form it should take
U = @(p,t,x) (372863112183097.*exp(500.*x - 250.*t).*(sinh(1000.*sum(((-1).^p.*p.*exp(-(555609333788003.*p.^2.*t)./56294995342131200).*(exp(pi.*p.*x.*(-i)).*(i./2) + exp(pi.*p.*x.*i).*(-i./2)))./((1884165843459159.*(p.^2 - 1).^2)./1208925819614629174706176 + (5825986127860891.*p.^2)./73786976294838206464 + 73792802280966067355./73786976294838206464), p == 1.n)) + 7017961089264186343289723609432566477005855403012763273460273598821737866336338749326047126764570042716934574784489366662785827208940701722862252654770355689539991848141850896551869806913239102400648200731032287182848.*sum(((-1).^p.*cos(pi.*x.*(p + 1./2)).*exp(-(555609333788003.*t.*(p + 1./2).^2)./56294995342131200).*(2.*p + 1))./((5825986127860891.*p)./73786976294838206464 + (1884165843459159.*(4.*p + 4.*p.^2 - 3).^2)./19342813113834066795298816 + (5825986127860891.*p.^2)./73786976294838206464 + 295177035109992130311./295147905179352825856), p == 1.n)))./2361183241434822606848;
x = -1:0.2:1;
t = 0:0.4:2;
p = 1:200;
y = U(p,t,x);
However, your function has 2 errors that must be fixed first:
U = @(p,t,x) (372863112183097.*exp(500.*x - 250.*t).*(sinh(1000.*sum(((-1).^p.*p.*exp(-(555609333788003.*p.^2.*t)./56294995342131200).*(exp(pi.*p.*x.*(-i)).*(i./2) + exp(pi.*p.*x.*i).*(-i./2)))./((1884165843459159.*(p.^2 - 1).^2)./1208925819614629174706176 + (5825986127860891.*p.^2)./73786976294838206464 + 73792802280966067355./73786976294838206464), p == 1.n)) + 7017961089264186343289723609432566477005855403012763273460273598821737866336338749326047126764570042716934574784489366662785827208940701722862252654770355689539991848141850896551869806913239102400648200731032287182848.*sum(((-1).^p.*cos(pi.*x.*(p + 1./2)).*exp(-(555609333788003.*t.*(p + 1./2).^2)./56294995342131200).*(2.*p + 1))./((5825986127860891.*p)./73786976294838206464 + (1884165843459159.*(4.*p + 4.*p.^2 - 3).^2)./19342813113834066795298816 + (5825986127860891.*p.^2)./73786976294838206464 + 295177035109992130311./295147905179352825856), p == 1.n)))./2361183241434822606848;
% follow the arrow > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > ^^^^ and > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > ^^^^
BTW, this function is a bit crazy. There's a 217 digit integer.... seems fishy.
카테고리
도움말 센터 및 File Exchange에서 Function Creation에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!