format compact A=[2 3 1;1 4 7] A(1,:),A(2,:) A(:,3) A(1:2,2:3) A([1 1 2 1 2 2],1:2)Tehtävä 1, s. 6 Muodosta 3x4-matriisi A ja poimi joitakin alkioita, rivien lineaarikombinaatioita ...
Loput tehtävät tässä kohdassa liian lapsellisia.
diag(1:3) eye(5) zeros(4,5) ans'
x=[1 2];y=[-2 3];addvec(x,y) x=[1, 0, 2]; y=[-1, 4, 1]; % Pilkkujen käyttö on yhdenmukaisempaa Maplen kanssa addvec3(x,y); gridaddvec on laode-funktio. Vertailun vuoksi kannattaa katsoa [HAM] s. 145.
Vektorin piirto pelkkänä janana on tietysti äärimmäisen yksinkertainen asia:
x=1:2; plot([0 x(1)],[0,x(2)]) x=1:3; plot3([0,x(1)],[0,x(2)],[0,x(3)]);gridMonikäyttöinen vecplot on peräisin kirjasta [RiSm]. Se on matlab-hakemistoissamme
help vecplot a -- 2 x n matriisi: Sarakkeet vektorien loppupisteet. v -- 2 x 1 sarakevekt: yhteinen alkupiste (opetus: Origo). Esim: t=pi/3;R=[cos(t),-sin(t);sin(t),cos(t)];v=[.5;1];vecplot([v,R*v]) axis([-1 1 0 1]); clf;v=[1;0] w=v;w=R*w;vecplot([v,w]);axis([-1 1 -1 1]);hold on w=R*w;vecplot([v,w]); Iteroidaan tätä riviä.Normi Matlabissa norm:n oletuksena on 2-normi, eli euklidinen normi
for n=1:10 norm(ones(n,1)) endMaplessa oletusnormina on "ääretön-normi". Euklidinen saadaan näin:
norm(vector([a,b,c]),2); Kts. [HAM] s. 146 Matlabissa toimivat:
>> norm((1:10),inf) ans = 10 >> norm((1:10),2) ans = 19.6214 >> norm((1:10)) ans = 19.6214Sisätulo (pistetulo) dot, ristitulo cross
x=[1 4 2];y=[2 3 -1]; dot(x,y) x*y' % myös näin, mieti miksi! sum(x.*y) % ja näinkin, mieti taas! cross(x,y)Tehtävä Määritä vektorin u kohtisuora projektio vektorilla v. Testaa nyt vaikka näillä:
u=1:3 v=[1,0,0];% v=[0,1,0] % v=[0,0,1]
e2_1_4 e2_1_5Ratkaise lineaarinen yhtälösysteemi ja tarkista kertomalla. Laske erityisesti erotus A*x - b . format long . Laske myös erotuksen normi.
A(2,3)=1 x=A\bLaske A:n determinantti ( det ) ja "häiriöalttius" ( cond ).
x=A\b
p(1)=2, p(2)=3, p'(-1)=-1, p'(3)=1.Piirrä polynomi sopivalla välillä ja samaan kuvaan myös "datarinkulat".
Kyseessä on ns. Hermiten interpolaatio , jossa asetetaan ehtoja
niin funktion arvoille kuin derivaatoille. (Välimuoto Taylorin ja Lagrangen
suhteen.)
Ohje: Kirjoita kynällä yhtälösysteemi, syötä sen matriisi Matlabiin
ja ratkaise. Polynomin arvojahan lasketaan polyval-funktiolla.
Täältä vaikka lisää tai help polyval .
8 V -----> Kirchhofin virtalaki: I1 | ----<---- | |--------- Virtapiirin jokaisessa pisteessä pätee: | | | tulevien virtojen summa = lähtevien < < summa. > 1 Ohmi 1 Ohmi > < < Kirchhofin jännitelaki: > > | 0.5 Ohmia | Virtapiirin jokaisessa suljetussa silmukassa ------\/\/\/--->-----| ulkoisen jännitelähteen jännite = | I3 | jännitehäviöiden summa. < | > | Ohmin laki: U=RI < 2 Ohmia I2 \/ > | | | | ----<---- | |--------- | 16 V ------>
50 20 10 0 |----|----|----|----|----| | | 80 | T1 T2 T3 T4 | 80 | | 60 | T5 T6 T7 T8 | 60 | | 40 | T9 T10 T11 T12 | 40 | | 20 | T13 T14 T15 T16 | 20 | | |----|----|----|----|----| 0 0 0 0Oletetaan, että sisäpisteiden lämpötilat T1,...,T16 saadaan naapuripisteiden lämpötilojen keskiarvona. (Kullakin sisäpisteellä on 4 naapuria, pohjois-, etelä-, itä-, länsi.) Muodosta lineaarinen yhtälösysteemi lämpötilojen T1,...,T16 ratkaisemiseksi. Rakenna yhtälösysteemi itsellesi ensin kynää ja paperia käyttäen ja syötä se sitten Matlabiin. Käytä ratkaisuun Matlabin valmista ratkaisijaa T=A\b . Piirrä lämpötilafunktion kuvaaja. Tämä käy muotoilemalla ratkaisuvektori T 4x4 - matriisiksi TMAT . ja soveltamalla surf -tyyppistä funktiota. Huom: TMAT -matriisin saa kätevästi komennon reshape avulla. Voit vielä liikutella pintaasi vaikkapa tähän tapaan:
for j=1:10;view(-20,10*j),pause,end;Tosin pyörittely käy nykyisin hyvin myös valikosta hiiren avulla. Tehtävä on tarkoitus tehdä Matlabilla. Maple-ohje vain asian lisäharrastukseen.
Huom! Tässä on kyse ihan oikeasta numerisesta menetelmästä ns. Laplacen osittaisdifferentiaaliyhtälön ratkaisemiksi, ns. differenssimenetelmästä.
Maple-ohje Systeemin voi ratkaista yhtä hyvin käyttäen Maple:n linalg[linsolve] - komentoa, jolloin muotoilu (vrt reshape edellä) voidaan tehdä ihan vain arkisella matrix komennolla. Piirtoon plots[matrixplot]
x+y=7
-x+3y=1
Tässä komennot, selvitä, leikkaa/liimaa Matlabiin.
x=[-3,7]; % Ei tarvita 100:aa pistettä, kaksi riittää. y=7-x plot(x,y,'b') xlabel('x');ylabel('y'); hold on y=(1+x)/3; plot(x,y,'r') axis('equal') gridJatketaan vielä laskemalla suorien leikkauspiste ja piirtämällä se rinkulalla.
A=[1 1;-1 3];b=[7;1]; x=A\b plot(x(1),x(2),'o') hold offTästä voitaisiin jatkaa tasoihin, saataisiin samalla meshgrid-kertaus (ss. 28-30). Ehkä jätetään se väliin ja katsotaan meshgrid-asiaa tuon tuostakin muuten. Tässä (s. 30) kerrataan myös yleinen piirto "nonlinear functions". Lue kirjasta ja kokeile jos tunnet tarvetta. Linkkejä ... Tehtäviä ss 32-33
x + 4y = -4 4x + 3y = 4sekä graafiseti että numeerisesti. Kokeile zoomia. Piirrä numeerisen ratkaisun perusteella rinkula oikeaan paikkaan.
A(i,:)=c*A(i,:); A(j,:)=A(j,:)+c*A(i,:); A([i j])=A([j i]); e2_3_8
a sin wt + b cos wt = C cos(wt -delta)Tee Matlab-funktio, joka laskee amplitudin C ja vaihekulman delta, kun syötteenä annetaan kertoimet a ja b. Jos olet unohtanut cos:n yhteenlaskukaavan, voit kysyä maplelta
cos(omega*t-delta);%=expand(%);
Huomaa, että vaihekulma ei tule yksikäsitteisesti määrätyksi lausekkeesta arctan(b/a), vaan koordinaattineljännes pitää päätellä a:n ja b:n merkeistä. Tätä varten on Matlabissa funktio atan2. (Myös angle(a+i*b) hoitaa homman).
%%%%%%%%%%% function[C,delta,lauseke] = amplitmuoto(a,b,w,t) % Kutsu 1: [C,delta,lauseke] = amplitmuoto(a,b,w,t) % Kutsu 2: [C,delta] = amplitmuoto(a,b) % Syöte: a -- cos-termin kerroin % b -- sin-termin kerroin % w -- kulmataajuus (valinnainen) % t -- vektori, jossa lausekkeen arvot lasketaan (valinnainen) C= ... ; delta = ... ; if nargout < 3 return; if nargin > 2 lauseke = ... end;
A:=matrix(3,3,[1,a,b,0,1,c,0,0,1]); AI:=augment(A,diag(1,1,1)); gaussjord(AI);a) Onko matriisi kääntyvä millä tahansa arvoilla a,b,c ?
A=[2 1 3;1 2 3;5 1 0] AI=[A eye(3)] IA=rref(AI) B=IA(:,4:6) [A*B,B*A] % tarkistus
C=[1 0 3;-1 2 -2;0 2 1] inv(C) CI=[C,eye(3)] format rational; format compact rref(CI) » rref(CI) ans = 1 0 3 0 -1 1 0 1 1/2 0 0 1/2 0 0 0 1 1 -1Rref-muodon alkio (3,3) = 0. Vastaavat bmato-alkiot eivät ole 0, joten ratkaisuja ei ole.
> A:=matrix(3,3,[1,epsilon,3,-1,2,-2,0,2,1]); > AI:=augment(A,diag(1,1,1)); > gaussjord(AI);
A=[0 -2;2 0];det(A) 4 A=[-0.5 -0.5;0.7 0.7];det(A) 0 A=[-1 -0.5;-2 -1],det(A) % toinen näistä riittää. 0 format short A=[0.7071 0.7071;-0.7071 0.7071],det(A)
%function [A,Theta,c]=kiertod(a,b) %A=[a -b;b a]; %Theta=atan2(b,a); %c=sqrt(a^2+b^2); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% format compact [A,T,c]=kiertod(3,4) A = 3 -4 4 3 T = 0.9273 c = 5 T/pi*180 ans = 53.1301 map Tarkistetaan, lähdetään hyvin lyhyestä liikkeelle (0.1,0).
clf A=diag(1:2) % Vaihda A siten kuin haluat. t=linspace(0,2*pi,50); % Kulmat ympyra=[cos(t);sin(t)]; % 1-ymp. pisteet: 1. rivi: x-pisteet % 2. rivi: y-pisteet kuva=A*ympyra; % Kuvapisteet A:lla kerrottaessa plot(ympyra(1,:),ympyra(2,:),'r') % Ympyrä punaisella 'r' hold on plot(kuva(1,:),kuva(2,:),'b'); % Kuva sinisellä axis('square');axis([-4 4 -4 4]) grid;shg; disp('Valitse punaiselta ympyrältä piste, jonka kuvan haluat nähdä') [x,y]=ginput(1) plot([0,x],[0,y],'r') uv=A*[x;y]; plot([0,uv(1)],[0,uv(2)],'b')Saadaan tällainen:
Tähän olis kiva laittaa for-silmukka, joka antaisi mahdollisuuden valita useita pisteitä ja katsoa niiden kuvautumista