Seuraa 
Viestejä45973

Eli tarvitsisin matlab-koodin, jonka avulla saisin ratkaistua seuraavan ongelman:
Millä kartion pohjan säteen ja kartion korkeuden arvoilla kartion pinta-ala on pienin, kun kartion tilavuus on 1 dm3.

Ilmeisestikin fminsearch-toimintoa pitäisi käyttää tuohon kartion pinta-alan funktioon, eli A=pi*r*(r^2+h^2)^(1/2), mutta miten?

  • ylös 0
  • alas 0

Kommentit (14)

^Quantum^
Eli tarvitsisin matlab-koodin, jonka avulla saisin ratkaistua seuraavan ongelman:
Millä kartion pohjan säteen ja kartion korkeuden arvoilla kartion pinta-ala on pienin, kun kartion tilavuus on 1 dm3.

Ilmeisestikin fminsearch-toimintoa pitäisi käyttää tuohon kartion pinta-alan funktioon, eli A=pi*r*(r^2+h^2)^(1/2), mutta miten?

fminsearchille muistaakseni annetaan parametreiksi optimoitavat suureet ja niiden alkuarvot. Mietit vain, mikä parametri siinä on nyt sitten vakio, jota ei optimoida...

^Quantum^
Eli tarvitsisin matlab-koodin, jonka avulla saisin ratkaistua seuraavan ongelman:
Millä kartion pohjan säteen ja kartion korkeuden arvoilla kartion pinta-ala on pienin, kun kartion tilavuus on 1 dm3.

Ilmeisestikin fminsearch-toimintoa pitäisi käyttää tuohon kartion pinta-alan funktioon, eli A=pi*r*(r^2+h^2)^(1/2), mutta miten?

kartion pinta-alan funktioon, eli A=pi*r*(r^2+h^2)^(1/2) ????

Ala= Pohjanala+vaipanala

Sisältö jatkuu mainoksen alla
Sisältö jatkuu mainoksen alla
Vierailija
^Quantum^
A=pi*r*(r^2+h^2)^(1/2), mutta miten?

Kirjoita funktio vektorimuuttujalle

A=pi*r(1)*(r(1)^2+r(2)^2)^(1/2)

Vierailija
^Quantum^
Taisin saada sen nyt toimimaan.
Kiitoksia.

Miten ratkaisit? Ei ainakaan onnistu pelkästään tuolla pinta-alan kaavalla, vaan jotenkin pitää ottaa mukaan se tilavuus.

Itse laskisin sen pinta-alan funktion käsin siten, että tilavuus pidetään vakiona. Esim. h ratkaistaan tilavuuden yhtälöstä r:n funktiona.

Sitten sijoitetaan matlabiin funktio A=inline('pi*r*sqrt(r^2+(3*V/(pi*r^2))^2)')
(Vpitää ensin määritellä)

ja haetaan minimi r komennolla ro= fminsearch(A,1)

Vai löytyyko tuon ehdon sijoittamiseen jokin sofistikoituneempi tapa?

Käytin fmincon toimintoa, johon saa suoraan argumentiksi tuon tilavuuden rajoituksen.
Eli fmincon(@ala,x0,[],[],[],[],[],[],@tilavuusrajoitus),
missä
@ala on
function A = ala(r)
A=pi*r(1)*(r(1)^2+r(2)^2)^(0.5) ja

@tilavuusrajoitus on
function [c,ceq]=tilavuusrajoitus(r)
c=0
ceq=(pi*r(1)^2*r(2))/3-1;

Vierailija
^Quantum^
Käytin fmincon toimintoa, johon saa suoraan argumentiksi tuon tilavuuden rajoituksen.

Tuollainenkin löytyy... Pitääpä laittaa korvan taakse, jos sattuu tarvitsemaan.

Osaisiko joku kertoa miten matlabissa asetetaan funktio x^2*e^x*sin2x niin että kone hyväksyy sen ? pitäisi laskea kyseisen integraalin arvo välillä [1,5] ja tarvittavien jakovälien määrä 3, 6, 9 desimaalin tarkkuuteen.

Vierailija

Luulen että ongelmana on kertoa jotain noiden funktioiden dimensioista, koska Matlabissa yleensä käytetään matriiseja ja vektoreita.

Ainakin itse kokeillessani laittamalla "1.*" noiden exp ja sin funktioiden eteen toimii. Esim exp(x) voidaan merkitä 1.*exp(x.*1)

ja x^2 pitää merkitä x.^2.

Edit: Ei mitään, näyttääkin tuo ohje toimivan riippumatta millä integroi.

bosoni
Luulen että ongelmana on kertoa jotain noiden funktioiden dimensioista, koska Matlabissa yleensä käytetään matriiseja ja vektoreita.

Ainakin itse kokeillessani laittamalla "1.*" noiden exp ja sin funktioiden eteen toimii. Esim exp(x) voidaan merkitä 1.*exp(x.*1)

ja x^2 pitää merkitä x.^2.


Olet oikeassa, mutta ei siinä mitään kryptistä "1.*" tarvita. Kyse on vain lausekkeen vektoroimisesta siten, että laskenta suoritetaan alkioittain jos muuttujat eivät ole skalaareita. Ja siihen tarkoitukseen riittää vain pelkkä piste "." operaattorin edellä. Eli jos on lauseke "1 / x", niin se vektoroidaan asettamalla piste jakomerkin eteen seuraavasti "1 ./ x". Samoin on mainitsemasi potenssiinkorotusoperaattorin kanssa "^" -> ".^". Sen sijaan valmisfunktioiden, kuten EXP(), SIN(), COSH(), SQRT() jne. tapauksissa asiaa ei tarvitse huomioida ollenkaan sillä ne vektoroituvat automaattisesti. Niin on myös skalaarilla kertomisen tai jakamisen tapauksessa sekä skalaarin kanssa yhteen- ja vähennyslaskuissa.

Eli lauseke "x^2*e^x*sin2x" vektoroidaan yksinkertaisesti seuraavasti "x.^2.*exp(x).*sin(2*x)". Silloin x voi olla minkäulotteinen tahansa taulukko ja lausekkeen arvo on yhtämoniulotteinen taulukko.

Vierailija
boner
Eli lauseke "x^2*e^x*sin2x" vektoroidaan yksinkertaisesti seuraavasti "x.^2.*exp(x).*sin(2*x)". Silloin x voi olla minkäulotteinen tahansa taulukko ja lausekkeen arvo on yhtämoniulotteinen taulukko.



Ok. En ole käyttänyt vähään aikaan tuota ohjelmaa. Muistin vain että pisteellä jotenkin saadaan kerrottua ohjelmalle että alkioita halutaan käsitellä. Sitten loppu meni menetelmällä "kokeillaan kaikkea kunnes jotain toimivaa löytyy".

Kiitoksia avusta! kaavalla x.^2.*exp(x).*sin(2*x) se viimein asettui paikoilleen. En ymmärtänyt pistää nuita pisteitä oikeille kohilleen. Vielä olisi kysymys miten yhtälö y' = x*ln(x^2)+x*sin(3*x) kuuluisis asettaa että matlab ymmartäisi. varmaan taas pisteet väärällä paikoilla...

No siis ihan vastaavasti. Se piste liittyy sitä seuraavaan operaattoriin. Lauseke "x*ln(x^2)+x*sin(3*x)" on vektoroituna "x.*log(x.^2)+x.*sin(3*x)" (Matlabissa log = ln)

Suosituimmat

Uusimmat

Sisältö jatkuu mainoksen alla

Suosituimmat