Filter löschen
Filter löschen

Exporting a code from Maple to Matlab

30 Ansichten (letzte 30 Tage)
student_md
student_md am 16 Okt. 2020
Kommentiert: student_md am 3 Dez. 2020
I use Matlab for numerical calculations.
But I use Maple for symbolic calculations and after the calculations I usually get piecewise functions in my maple codes.
I think the 3d plots in Matlab is very attractive more than Maple plots. So, I want to export piecewise functions in maple to a Matlab code in order to utilize advantages of plots of Matlab.
MAPLE CODE
restart:
u:=1/(1. + exp(x))^2 + 1/(1. + exp(-5.*t))^2 - 0.2500000000 + x*(1/(1. + exp(1 - 5*t))^2 - 1./((1. + exp(-5*t))^2) + 0.1776705118 + 0.0415431679756514*piecewise(0. <= t and t <= 0.5000000000, 1.732050808, 0.) + 0.00922094377856479*piecewise(0. <= t and t <= 0.5000000000, 30.98386677*t - 7.745966692, 0.) + 0.0603742508215732*piecewise(0.5000000000 <= t and t <= 1., 1.732050808, 0.) - 0.00399645630498528*piecewise(0.5000000000 <= t and t <= 1., 30.98386677*t - 23.23790008, 0.)) + (-0.00243051684581302*piecewise(0. <= x and x <= 0.5000000000, 1.732050808, 0.) - 0.000809061198761621*piecewise(0. <= x and x <= 0.5000000000, 30.98386677*x - 7.745966692, 0.) - 0.0152377552205917*piecewise(0.5000000000 <= x and x <= 1., 1.732050808, 0.) - 0.00195593427342862*piecewise(0.5000000000 <= x and x <= 1., 30.98386677*x - 23.23790008, 0.))*piecewise(0. <= t and t <= 0.5000000000, 1.732050808, 0.) + (-0.000433590063316381*piecewise(0. <= x and x <= 0.5000000000, 1.732050808, 0.) - 0.000146112803263678*piecewise(0. <= x and x <= 0.5000000000, 30.98386677*x - 7.745966692, 0.) - 0.00319022339097685*piecewise(0.5000000000 <= x and x <= 1., 1.732050808, 0.) - 0.000477063086307787*piecewise(0.5000000000 <= x and x <= 1., 30.98386677*x - 23.23790008, 0.))*piecewise(0. <= t and t <= 0.5000000000, 30.98386677*t - 7.745966692, 0.) + (-0.00276114805649180*piecewise(0. <= x and x <= 0.5000000000, 1.732050808, 0.) - 0.000933166016624500*piecewise(0. <= x and x <= 0.5000000000, 30.98386677*x - 7.745966692, 0.) - 0.0207984584912892*piecewise(0.5000000000 <= x and x <= 1., 1.732050808, 0.) - 0.00314360556336114*piecewise(0.5000000000 <= x and x <= 1., 30.98386677*x - 23.23790008, 0.))*piecewise(0.5000000000 <= t and t <= 1., 1.732050808, 0.) + (0.000172746997599710*piecewise(0. <= x and x <= 0.5000000000, 1.732050808, 0.) + 0.0000586775450031145*piecewise(0. <= x and x <= 0.5000000000, 30.98386677*x - 7.745966692, 0.) + 0.00136190009033518*piecewise(0.5000000000 <= x and x <= 1., 1.732050808, 0.) + 0.000211410172315387*piecewise(0.5000000000 <= x and x <= 1., 30.98386677*x - 23.23790008, 0.))*piecewise(0.5000000000 <= t and t <= 1., 30.98386677*t - 23.23790008, 0.):
>
plot3d( u,
x=0..1,
t=0..1,
style=surface,
axes=boxed,
colorscheme=[yellow, red]
);
We can transform a maple code to Matlab code by using
with(CodeGeneration):
Matlab(u,resultname="w");
. But The code can' t properly transform to Matlab code.
Could you help me pls
  2 Kommentare
Rik
Rik am 16 Okt. 2020
Is your question how to implement this code in Matlab, or how to successfully convert the code in Maple? As it stands now your question seems better suited to a Maple forum.
student_md
student_md am 16 Okt. 2020
How to implement this Maple code in Matlab?

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Walter Roberson
Walter Roberson am 16 Okt. 2020
Optimized version of the calculation:
t1 = exp(x);
t21 = -5 .* t;
t3 = exp(t21);
t5 = exp((1 + t21));
t4 = ((0 <= t & t <= 1/2) .* 1.73205);
t5 = ((0 <= t & t <= 1/2) .* (30.9839 .* t - 7.74597));
t6 = ((1/2 <= t & t <= 1) .* 1.73205);
t7 = ((1/2 <= t & t <= 1) .* (30.9839 .* t - 23.2379));
t6 = (1 + t5).^2;
t2 = 1 ./ t6;
t7 = (1 + t3).^2;
t3 = 1 ./ t7;
t8 = -0.00399646;
t9 = 0.00922094;
t10 = 0.0415432;
t11 = 0.0603743;
t12 = 0.177671;
t13 = ((0 <= x & x <= 1/2) .* 1.73205);
t14 = ((0 <= x & x <= 1/2) .* (30.9839 .* x - 7.74597));
t15 = ((1/2 <= x & x <= 1) .* 1.73205);
t16 = ((1/2 <= x & x <= 1) .* (30.9839 .* x - 23.2379));
t8 = (1 + t1).^2;
t1 = 1 ./ t8;
u1 = -1/4 + (-0.00243052 .* t13 - 0.000809061 .* t14 - 0.00195593 .* t16 - 0.0152378 .* t15) .* t4 + (-0.00043359 .* t13 - 0.000146113 .* t14 - 0.000477063 .* t16 - 0.00319022 .* t15) .* t5 + (-0.00276115 .* t13 - 0.000933166 .* t14 - 0.00314361 .* t16 - 0.0207985 .* t15) .* t6 + t7 .* (0.000172747 .* t13 + 0.0013619 .* t15 + 0.00021141 .* t16 + 5.86775e-05 .* t14) + x .* (t10 .* t4 + t11 .* t6 + t5 .* t9 + t7 .* t8 + t12 + t2 - t3) + t3 + t1;
Unoptimized version of the calculation.
u1 = 1 ./ (1 + exp(x)).^2 + 1 ./ (1 + exp(-(5 .* t))).^2 - 1/4 + x .* (1 ./ (1 + exp((1 - 5 .* t))).^2 - 1 ./ (1 + exp(-(5 .* t))).^2 + 0.177671 + 0.0415432 .* ((0 <= t & t <= 1/2) .* 1.73205) + 0.00922094 .* ((0 <= t & t <= 1/2) .* (30.9839 .* t - 7.74597)) + 0.0603743 .* ((1/2 <= t & t <= 1) .* 1.73205) - 0.00399646 .* ((1/2 <= t & t <= 1) .* (30.9839 .* t - 23.2379))) + (-0.00243052 .* ((0 <= x & x <= 1/2) .* 1.73205) - 0.000809061 .* ((0 <= x & x <= 1/2) .* (30.9839 .* x - 7.74597)) - 0.0152378 .* ((1/2 <= x & x <= 1) .* 1.73205) - 0.00195593 .* ((1/2 <= x & x <= 1) .* (30.9839 .* x - 23.2379))) .* ((0 <= t & t <= 1/2) .* 1.73205) + (-0.00043359 .* ((0 <= x & x <= 1/2) .* 1.73205) - 0.000146113 .* ((0 <= x & x <= 1/2) .* (30.9839 .* x - 7.74597)) - 0.00319022 .* ((1/2 <= x & x <= 1) .* 1.73205) - 0.000477063 .* ((1/2 <= x & x <= 1) .* (30.9839 .* x - 23.2379))) .* ((0 <= t & t <= 1/2) .* (30.9839 .* t - 7.74597)) + (-0.00276115 .* ((0 <= x & x <= 1/2) .* 1.73205) - 0.000933166 .* ((0 <= x & x <= 1/2) .* (30.9839 .* x - 7.74597)) - 0.0207985 .* ((1/2 <= x & x <= 1) .* 1.73205) - 0.00314361 .* ((1/2 <= x & x <= 1) .* (30.9839 .* x - 23.2379))) .* ((1/2 <= t & t <= 1) .* 1.73205) + (0.000172747 .* ((0 <= x & x <= 1/2) .* 1.73205) + 5.86775e-05 .* ((0 <= x & x <= 1/2) .* (30.9839 .* x - 7.74597)) + 0.0013619 .* ((1/2 <= x & x <= 1) .* 1.73205) + 0.00021141 .* ((1/2 <= x & x <= 1) .* (30.9839 .* x - 23.2379))) .* ((1/2 <= t & t <= 1) .* (30.9839 .* t - 23.2379));
Before this you would do the kind of meshgrid() bit that KSSV indicated, and you could surf() the way he did as well.
  6 Kommentare
Walter Roberson
Walter Roberson am 2 Dez. 2020
Unfortunately I recently had a disk crash that affected the drive I was using and the automatic backups of it. I had copied files from it not long before that, but a bunch of the copied files are empty, and I fear that my entire progress on this topic might have vanished.
student_md
student_md am 3 Dez. 2020
I would like to state that I am very sorry for the unfortunate crash you have experienced. I hope you can recover all of your data as soon as possible.
Me and a lot of people who need the fantastic Maple code are looking forward to good news from you :)
Best regards.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

KSSV
KSSV am 16 Okt. 2020
Some thing like this:
x = linspace(0,1) ;
t = linspace(0,1) ;
[x,t] = meshgrid(x,t) ;
u =1./(1. + exp(x)).^2 + 1./(1. + exp(-5.*t)).^2 - 0.2500000000 + x.*(1./(1. + exp(1 - 5*t)).^2 - 1./((1. + exp(-5*t)).^2) .......
+ 0.1776705118 + 0.0415431679756514*piecewise(0. <= t && t <= 0.5000000000, 1.732050808, 0.) .......
+ 0.00922094377856479*piecewise(0. <= t && t <= 0.5000000000, 30.98386677*t - 7.745966692, 0.) .........
+ 0.0603742508215732*piecewise(0.5000000000 <= t && t <= 1., 1.732050808, 0.) ..........
- 0.00399645630498528*piecewise(0.5000000000 <= t && t <= 1., 30.98386677*t ........
- 23.23790008, 0.)) + (-0.00243051684581302*piecewise(0. <= x && x <= 0.5000000000, 1.732050808, 0.).........
- 0.000809061198761621*piecewise(0. <= x && x <= 0.5000000000, 30.98386677*.x .........
- 7.745966692, 0.) - 0.0152377552205917*piecewise(0.5000000000 <= x && x <= 1., 1.732050808, 0.) ........
- 0.00195593427342862*piecewise(0.5000000000 <= x && x <= 1., 30.98386677*x - 23.23790008, 0.)).*piecewise(0. <= t && t <= 0.5000000000, 1.732050808, 0.) ........
+ (-0.000433590063316381*piecewise(0. <= x && x <= 0.5000000000, 1.732050808, 0.) .........
- 0.000146112803263678*piecewise(0. <= x && x <= 0.5000000000, 30.98386677*x - 7.745966692, 0.) .........
- 0.00319022339097685*piecewise(0.5000000000 <= x && x <= 1., 1.732050808, 0.) ...........
- 0.000477063086307787*piecewise(0.5000000000 <= x && x <= 1., 30.98386677*x - 23.23790008, 0.)).*piecewise(0. <= t && t <= 0.5000000000, 30.98386677*t - 7.745966692, 0.) .........
+ (-0.00276114805649180*piecewise(0. <= x && x <= 0.5000000000, 1.732050808, 0.) .......
- 0.000933166016624500*piecewise(0. <= x && x <= 0.5000000000, 30.98386677*x - 7.745966692, 0.)...............
- 0.0207984584912892*piecewise(0.5000000000 <= x && x <= 1., 1.732050808, 0.) .............
- 0.00314360556336114*piecewise(0.5000000000 <= x && x <= 1., 30.98386677*x - 23.23790008, 0.)).*piecewise(0.5000000000 <= t && t <= 1., 1.732050808, 0.) ..............
+ (0.000172746997599710*piecewise(0. <= x && x <= 0.5000000000, 1.732050808, 0.) + 0.0000586775450031145*piecewise(0. <= x && x <= 0.5000000000, 30.98386677*x - 7.745966692, 0.) .............
+ 0.00136190009033518*piecewise(0.5000000000 <= x && x <= 1., 1.732050808, 0.) .......
+ 0.000211410172315387*piecewise(0.5000000000 <= x && x <= 1., 30.98386677*x - 23.23790008, 0.)).*piecewise(0.5000000000 <= t && t <= 1., 30.98386677*t - 23.23790008, 0.) ;
surf(x,t,u)
shading interp
colorbar
If error throws, may be you have to use element by element multiplication .*.
or use element by element divison, ./
Replace and with &&
Or Repalce all && with &.
  2 Kommentare
student_md
student_md am 16 Okt. 2020
Bearbeitet: student_md am 16 Okt. 2020
The code is not working...I think your code for piecewise function is not appropriate for Matlab.
Walter Roberson
Walter Roberson am 16 Okt. 2020
piecewise() is defined, but it requires the Symbolic toolbox.

Melden Sie sich an, um zu kommentieren.

Produkte


Version

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by