Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
Boris Davidovič Forumaš(ica)

Pridružen/a: 08. 01. 2004. (23:05:18) Postovi: (3C)16
|
Postano: 20:40 sub, 17. 4. 2004 Naslov: Programiranje u mathematici |
|
|
Možda i nije mjesto na ovom forumu, ali ... :
Nekoliko pitanja o radu s Mathematicom :
1. Kako automatizirati sljedeću liniju :
Show[g[1], g[2], g[3], g[4], g[5], g[6], g[7], g[8],g[9],g[10]]
Ako je Array g napunjen plotovima, tj. dobiven sa :
g[i]=Plot[nešto] , i = 1...n
Kako pri tome onemogućiti da se izlaz od Plota prikaže, tj. da se vrijednosti samo
spreme u polje g?
2. Kako u Mathematici pisati funkcije koje unutar tijela imaju petlje i
slične stvari. Konkretno kako prevesti sljedeci C kod :
double spline(double y)
{
int i=0;
double sol,h;
h=(b-a)/n;
i=(int)ceil((y-a)/h);//u kojem smo segmentu
sol=f[i-1]+((f[i]-f[i-1])/(x[i]-x[i-1]))*(y-x[i-1]);//Newtonow oblik IP-a
return sol;
}
3. Kako preusmjeriti izlaz u tekući direktorij, a ne u onaj u kojem je instalirana Mathematica
(naravno, uz pretpostavku da se path ne navodi eksplicitno)
4. Jedan problem u radu s poljem funkcija ,tj. zašto sljedeći kod :
Array[l,n];
For[i=1,i<=n,i++,
l[i][z_] := f0[i - 1] +(f0[i] - f0[i - 1])/(x[i] - x[i - 1])*(z - x[i - 1]);]
(pri čemu su sve vrijednosti u poljima f0 i x ispravne i sve varijable počišćene)
radi, dok sljedeći :
Array[fi,n+1];
fi[0][z_]:=(x[1]-z)/(x[1]-x[0]) /;x[0]<=z<=x[1]
fi[0][z_]:=0 /; z>x[1]
fi[n][z_]:=(x[n-1]-z)/(x[n-1]-x[n]) /;x[n-1]<=z<=x[n]
fi[n][z_]:=0 /;z\[LessEqual]x[n-1]
For[i=1,i<=n-1,i++,
fi[i][z_]:=(z-x[i-1])/(x[i]-x[i-1]) /; x[i-1]<=z<=x[i];
fi[i][z_]:=(z-x[i+1])/(x[i]-x[i+1]) /;x[i]<z<=x[i+1];
fi[i][z_]:=0 /; z<x[i-1] || z>x[i+1];
]
Ne daje nikakav output?
Kodovi bi trebali generirati linearne splineove i to prvi eksplicitno na svakom segmentu
subdivizije, a drugi definira bazu za prostor linearnih splineova na nekom segmentu.
Hvala.
Možda i nije mjesto na ovom forumu, ali ... :
Nekoliko pitanja o radu s Mathematicom :
1. Kako automatizirati sljedeću liniju :
Show[g[1], g[2], g[3], g[4], g[5], g[6], g[7], g[8],g[9],g[10]]
Ako je Array g napunjen plotovima, tj. dobiven sa :
g[i]=Plot[nešto] , i = 1...n
Kako pri tome onemogućiti da se izlaz od Plota prikaže, tj. da se vrijednosti samo
spreme u polje g?
2. Kako u Mathematici pisati funkcije koje unutar tijela imaju petlje i
slične stvari. Konkretno kako prevesti sljedeci C kod :
double spline(double y)
{
int i=0;
double sol,h;
h=(b-a)/n;
i=(int)ceil((y-a)/h);//u kojem smo segmentu
sol=f[i-1]+((f[i]-f[i-1])/(x[i]-x[i-1]))*(y-x[i-1]);//Newtonow oblik IP-a
return sol;
}
3. Kako preusmjeriti izlaz u tekući direktorij, a ne u onaj u kojem je instalirana Mathematica
(naravno, uz pretpostavku da se path ne navodi eksplicitno)
4. Jedan problem u radu s poljem funkcija ,tj. zašto sljedeći kod :
Array[l,n];
For[i=1,i⇐n,i++,
l[i][z_] := f0[i - 1] +(f0[i] - f0[i - 1])/(x[i] - x[i - 1])*(z - x[i - 1]);]
(pri čemu su sve vrijednosti u poljima f0 i x ispravne i sve varijable počišćene)
radi, dok sljedeći :
Array[fi,n+1];
fi[0][z_]:=(x[1]-z)/(x[1]-x[0]) /;x[0]⇐z⇐x[1]
fi[0][z_]:=0 /; z>x[1]
fi[n][z_]:=(x[n-1]-z)/(x[n-1]-x[n]) /;x[n-1]⇐z⇐x[n]
fi[n][z_]:=0 /;z\[LessEqual]x[n-1]
For[i=1,i⇐n-1,i++,
fi[i][z_]:=(z-x[i-1])/(x[i]-x[i-1]) /; x[i-1]⇐z⇐x[i];
fi[i][z_]:=(z-x[i+1])/(x[i]-x[i+1]) /;x[i]<z⇐x[i+1];
fi[i][z_]:=0 /; z<x[i-1] || z>x[i+1];
]
Ne daje nikakav output?
Kodovi bi trebali generirati linearne splineove i to prvi eksplicitno na svakom segmentu
subdivizije, a drugi definira bazu za prostor linearnih splineova na nekom segmentu.
Hvala.
|
|
[Vrh] |
|
veky Forumaš(ica)

Pridružen/a: 09. 12. 2002. (19:59:43) Postovi: (5B0)16
Lokacija: negdje daleko...
|
Postano: 23:15 sub, 17. 4. 2004 Naslov: Re: Programiranje u mathematici |
|
|
[quote="Boris Davidovič"]Možda i nije mjesto na ovom forumu, ali ... :
Nekoliko pitanja o radu s Mathematicom :
1. Kako automatizirati sljedeću liniju :
Show[g[1], g[2], g[3], g[4], g[5], g[6], g[7], g[8],g[9],g[10]]
Ako je Array g napunjen plotovima, tj. dobiven sa :
g[i]=Plot[nešto] , i = 1...n
[/quote]
Show@Array[g,9]
(Striktno, ovo što ti želiš je Show@@Array[g,9] , ali radit će i onako kako piše gore),
[quote] Kako pri tome onemogućiti da se izlaz od Plota prikaže, tj. da se vrijednosti samo
spreme u polje g?[/quote]
Vidi 'DisplayFunction' u Helpu. Pod Further Examples je detaljno objašnjeno.
[quote]2. Kako u Mathematici pisati funkcije koje unutar tijela imaju petlje i
slične stvari.[/quote]
Pogledaj 'Module' u Helpu.
[quote] Konkretno kako prevesti sljedeci C kod :
double spline(double y)
{
int i=0;
double sol,h;
h=(b-a)/n;
i=(int)ceil((y-a)/h);//u kojem smo segmentu
sol=f[i-1]+((f[i]-f[i-1])/(x[i]-x[i-1]))*(y-x[i-1]);//Newtonow oblik IP-a
return sol;
}[/quote]
Otprilike ovako (a , b i n su valjda globalne varijable):
[code:1]spline@y_?NumericQ:=Module[{i=0,sol,h},
h=(b-a)/n;
i=Ceiling[(y-a)/h];
sol=f[[i]]+(f[[i+1]-f[[i]])/(x[[i+1]]-x[[i]])*(y-x[[i]]);
sol
][/code:1]
[quote]3. Kako preusmjeriti izlaz u tekući direktorij, a ne u onaj u kojem je instalirana Mathematica
(naravno, uz pretpostavku da se path ne navodi eksplicitno)[/quote]
Vidi 'SetDirectory' u Helpu. Početni "tekući direktorij" je upravo onaj u kojem je instalirana Mma, inače.
[quote]4. Jedan problem u radu s poljem funkcija ,tj. zašto sljedeći kod :
Array[l,n];
For[i=1,i<=n,i++,
l[i][z_] := f0[i - 1] +(f0[i] - f0[i - 1])/(x[i] - x[i - 1])*(z - x[i - 1]);]
(pri čemu su sve vrijednosti u poljima f0 i x ispravne i sve varijable počišćene)
radi, dok sljedeći :
Array[fi,n+1];[/quote]
Smijem pitati što će ti ovo? Mislim, ne škodi, ali i ne treba...
[quote]
fi[0][z_]:=(x[1]-z)/(x[1]-x[0]) /;x[0]<=z<=x[1]
fi[0][z_]:=0 /; z>x[1]
fi[n][z_]:=(x[n-1]-z)/(x[n-1]-x[n]) /;x[n-1]<=z<=x[n]
fi[n][z_]:=0 /;z\[LessEqual]x[n-1]
For[i=1,i<=n-1,i++,
fi[i][z_]:=(z-x[i-1])/(x[i]-x[i-1]) /; x[i-1]<=z<=x[i];
fi[i][z_]:=(z-x[i+1])/(x[i]-x[i+1]) /;x[i]<z<=x[i+1];
fi[i][z_]:=0 /; z<x[i-1] || z>x[i+1];
]
Ne daje nikakav output?
Kodovi bi trebali generirati linearne splineove i to prvi eksplicitno na svakom segmentu
subdivizije, a drugi definira bazu za prostor linearnih splineova na nekom segmentu.[/quote]
Hm... možda se uvjeti ( /; ) ne evaluiraju dinamički... radi li kad u gornjem primjeru (koji radi) staviš uvjet na z koji ovisi o i ?
Boris Davidovič (napisa): | Možda i nije mjesto na ovom forumu, ali ... :
Nekoliko pitanja o radu s Mathematicom :
1. Kako automatizirati sljedeću liniju :
Show[g[1], g[2], g[3], g[4], g[5], g[6], g[7], g[8],g[9],g[10]]
Ako je Array g napunjen plotovima, tj. dobiven sa :
g[i]=Plot[nešto] , i = 1...n
|
Show@Array[g,9]
(Striktno, ovo što ti želiš je Show@@Array[g,9] , ali radit će i onako kako piše gore),
Citat: | Kako pri tome onemogućiti da se izlaz od Plota prikaže, tj. da se vrijednosti samo
spreme u polje g? |
Vidi 'DisplayFunction' u Helpu. Pod Further Examples je detaljno objašnjeno.
Citat: | 2. Kako u Mathematici pisati funkcije koje unutar tijela imaju petlje i
slične stvari. |
Pogledaj 'Module' u Helpu.
Citat: | Konkretno kako prevesti sljedeci C kod :
double spline(double y)
{
int i=0;
double sol,h;
h=(b-a)/n;
i=(int)ceil((y-a)/h);//u kojem smo segmentu
sol=f[i-1]+((f[i]-f[i-1])/(x[i]-x[i-1]))*(y-x[i-1]);//Newtonow oblik IP-a
return sol;
} |
Otprilike ovako (a , b i n su valjda globalne varijable):
Kod: | spline@y_?NumericQ:=Module[{i=0,sol,h},
h=(b-a)/n;
i=Ceiling[(y-a)/h];
sol=f[[i]]+(f[[i+1]-f[[i]])/(x[[i+1]]-x[[i]])*(y-x[[i]]);
sol
] |
Citat: | 3. Kako preusmjeriti izlaz u tekući direktorij, a ne u onaj u kojem je instalirana Mathematica
(naravno, uz pretpostavku da se path ne navodi eksplicitno) |
Vidi 'SetDirectory' u Helpu. Početni "tekući direktorij" je upravo onaj u kojem je instalirana Mma, inače.
Citat: | 4. Jedan problem u radu s poljem funkcija ,tj. zašto sljedeći kod :
Array[l,n];
For[i=1,i⇐n,i++,
l[i][z_] := f0[i - 1] +(f0[i] - f0[i - 1])/(x[i] - x[i - 1])*(z - x[i - 1]);]
(pri čemu su sve vrijednosti u poljima f0 i x ispravne i sve varijable počišćene)
radi, dok sljedeći :
Array[fi,n+1]; |
Smijem pitati što će ti ovo? Mislim, ne škodi, ali i ne treba...
Citat: |
fi[0][z_]:=(x[1]-z)/(x[1]-x[0]) /;x[0]⇐z⇐x[1]
fi[0][z_]:=0 /; z>x[1]
fi[n][z_]:=(x[n-1]-z)/(x[n-1]-x[n]) /;x[n-1]⇐z⇐x[n]
fi[n][z_]:=0 /;z\[LessEqual]x[n-1]
For[i=1,i⇐n-1,i++,
fi[i][z_]:=(z-x[i-1])/(x[i]-x[i-1]) /; x[i-1]⇐z⇐x[i];
fi[i][z_]:=(z-x[i+1])/(x[i]-x[i+1]) /;x[i]<z⇐x[i+1];
fi[i][z_]:=0 /; z<x[i-1] || z>x[i+1];
]
Ne daje nikakav output?
Kodovi bi trebali generirati linearne splineove i to prvi eksplicitno na svakom segmentu
subdivizije, a drugi definira bazu za prostor linearnih splineova na nekom segmentu. |
Hm... možda se uvjeti ( /; ) ne evaluiraju dinamički... radi li kad u gornjem primjeru (koji radi) staviš uvjet na z koji ovisi o i ?
|
|
[Vrh] |
|
Boris Davidovič Forumaš(ica)

Pridružen/a: 08. 01. 2004. (23:05:18) Postovi: (3C)16
|
Postano: 14:32 pon, 19. 4. 2004 Naslov: |
|
|
Nisam još uspio skužiti kako prvo spremiti plotove u polje, a da se pri tom ne prikazuju, pa ih kasnije prikazati sa Show[opcija]@@Array[...] , naime ne znam kuda ubaciti opciju koja ponovo prikazuje plot.
Onakav kod za modul kakav je bio u odgovoru baš i nije bio od pomoći, no sljedeći : [code:1]
Clear[a,b,n,h,x,f0,spline];
a=-1;
b=1;
n=10;
h=(b-a)/n;
Array[x,n+1];(*točke interpolacije*)
Array[f0,n+1];(*vrijednost f-je u točkama interpolacije*)
For[i=0,i<=n,i++,
x[i]=a+i*h;
f0[i]=f[x[i]];
]
spline[y_]:=Module[{i=0,sol},
i=Ceiling[(y-a)/h];
sol=f0[i]+((f0[i+1]-f0[i])/(x[i+1]-x[i]))*(y-x[i]);
sol
]
Plot[Evaluate[{spline[x],f[x]}],{x,a,b}]
[/code:1]
(f[z] je definirana kako treba)
točno izračuna vrijednosti u točkama, no plot javlja svakakve gluposti.
Inače, sve ovo mi je trebalo da probam plotati interpolaciju, kakva mi je već trebala, pa kako nijedna opcija nije radila probao sam sa svakom koja mi je pala na pamet.
U svakom slučaju sad sam uspio osposobiti BC++ 3.11 za DOS, pa neće biti strašno niti ako nitko ne odgovori na pitanja.
Nisam još uspio skužiti kako prvo spremiti plotove u polje, a da se pri tom ne prikazuju, pa ih kasnije prikazati sa Show[opcija]@@Array[...] , naime ne znam kuda ubaciti opciju koja ponovo prikazuje plot.
Onakav kod za modul kakav je bio u odgovoru baš i nije bio od pomoći, no sljedeći : Kod: |
Clear[a,b,n,h,x,f0,spline];
a=-1;
b=1;
n=10;
h=(b-a)/n;
Array[x,n+1];(*točke interpolacije*)
Array[f0,n+1];(*vrijednost f-je u točkama interpolacije*)
For[i=0,i<=n,i++,
x[i]=a+i*h;
f0[i]=f[x[i]];
]
spline[y_]:=Module[{i=0,sol},
i=Ceiling[(y-a)/h];
sol=f0[i]+((f0[i+1]-f0[i])/(x[i+1]-x[i]))*(y-x[i]);
sol
]
Plot[Evaluate[{spline[x],f[x]}],{x,a,b}]
|
(f[z] je definirana kako treba)
točno izračuna vrijednosti u točkama, no plot javlja svakakve gluposti.
Inače, sve ovo mi je trebalo da probam plotati interpolaciju, kakva mi je već trebala, pa kako nijedna opcija nije radila probao sam sa svakom koja mi je pala na pamet.
U svakom slučaju sad sam uspio osposobiti BC++ 3.11 za DOS, pa neće biti strašno niti ako nitko ne odgovori na pitanja.
|
|
[Vrh] |
|
krcko Forumaš nagrađen za životno djelo


Pridružen/a: 07. 10. 2002. (15:57:59) Postovi: (18B3)16
|
Postano: 16:51 pon, 19. 4. 2004 Naslov: |
|
|
[quote="Boris Davidovič"]Nisam još uspio skužiti kako prvo spremiti plotove u polje, a da se pri tom ne prikazuju, pa ih kasnije prikazati sa Show[opcija]@@Array[...] , naime ne znam kuda ubaciti opciju koja ponovo prikazuje plot.[/quote]
Evo, ovako...
[code:1]slike=Table[Plot[Sin[n x],{x,0,2Pi},DisplayFunction->Identity],{n,1,3}]
Show[slike,DisplayFunction->$DisplayFunction][/code:1]
Boris Davidovič (napisa): | Nisam još uspio skužiti kako prvo spremiti plotove u polje, a da se pri tom ne prikazuju, pa ih kasnije prikazati sa Show[opcija]@@Array[...] , naime ne znam kuda ubaciti opciju koja ponovo prikazuje plot. |
Evo, ovako...
Kod: | slike=Table[Plot[Sin[n x],{x,0,2Pi},DisplayFunction->Identity],{n,1,3}]
Show[slike,DisplayFunction->$DisplayFunction] |
_________________ Vedran Krcadinac
Ljudi su razliciti, a nula je paran broj.
|
|
[Vrh] |
|
|