How can i plot an inline function?
조회 수: 13 (최근 30일)
이전 댓글 표시
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
댓글 수: 0
답변 (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.
댓글 수: 0
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.
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Function Creation에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!