Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
PROVA 2 GUIDI RESOLVIDA/.DS_Store __MACOSX/PROVA 2 GUIDI RESOLVIDA/._.DS_Store PROVA 2 GUIDI RESOLVIDA/AULAS NUMERICO/.DS_Store __MACOSX/PROVA 2 GUIDI RESOLVIDA/AULAS NUMERICO/._.DS_Store PROVA 2 GUIDI RESOLVIDA/AULAS NUMERICO/2103.sci //a funcao f1 calcula certo com o argumento x for um escalar function y=f1(x) y=cos(x*x)-1+0.5*x^4 endfunction //a funcao f2 calcula corretamente com o .^ function y=f2(x) y=cos(x.*x)-1+0.5*x.^4 endfunction PROVA 2 GUIDI RESOLVIDA/AULAS NUMERICO/2303.sci //vamos definir a funcao //da qual desejamos determinar o zero //funcao function y=f(x) y=x-exp(-x) endfunction //derivada function y=df(x) y=1+exp(-x) endfunction //newton ralphs [x_nr,fx_nr,n_nr]=fsolve_nr(0.5,f,df) //bissecacao [x_b,fx_b,n_b]=fsolve_b(0.5,0.6,f) //tolerancia 10^-10 com aprox inicial 0.5 e 0.6 //netwon ralphs nunca converge se nao tem derivada definida na raiz do problema //ou quando a aproximaçao inicial nao é suficientemente pequena //por ex x^3-2x+2 //com x0 = 0 e x0 = 1 PROVA 2 GUIDI RESOLVIDA/AULAS NUMERICO/Aula 2 exercícios/.DS_Store __MACOSX/PROVA 2 GUIDI RESOLVIDA/AULAS NUMERICO/Aula 2 exercícios/._.DS_Store PROVA 2 GUIDI RESOLVIDA/AULAS NUMERICO/Aula 2 exercícios/exercicio5.sci xi=[0.1 .267 .433 .6 .767 .933 1.1 1.27 1.43 1.6]' fi=[.00973 .0762 .159 .294 .489 .661 .832 .999 .982 .960]' function y=phi1(x) y=cos(x/2) endfunction function y=phi2(x) y=cos(x) endfunction function y=phi3(x) y=cos(1.5*x) endfunction // construção matriz Phi Phi=[phi1(xi) phi2(xi) phi3(xi)] // solução para ajuste a=(Phi'*Phi)\(Phi'*fi) // função ajustada function y=phi(x) y=a(1)*phi1(x)+a(2)*phi2(x)+a(3)*phi3(x) endfunction // ajuste linearizado lnfi=log(fi) // funções do ajuste function y=psi1(x) y=ones(x) endfunction function y=psi2(x) y=log(x) endfunction function y=psi3(x) y=x.^2 endfunction // construção da matriz psi Psi=[psi1(xi) psi2(xi) psi3(xi)] // solução9 do ajuste b_til=(Psi'*Psi)\(Psi'*lnfi) //parametros originais ajustados b=[exp(b_til(1));b_til(2);b_til(3)] // função ajustada function y=psi(x) y=b(1)*(x.^b(2)).*exp(b(3)*x.^2) endfunction //visualização scf(0) plot(xi,fi,'r.') x=linspace(0.1,1.6) // mesmo intervalo dos dados (1 coordenada) plot(x,phi(x),'r-') plot(x,psi(x)) xgrid //soma do quadrado das diferenças Q_phi=norm(fi-phi(xi),2)^2 Q_psi=norm(fi-psi(xi),2)^2 PROVA 2 GUIDI RESOLVIDA/AULAS NUMERICO/Aula 2 exercícios/Icon __MACOSX/PROVA 2 GUIDI RESOLVIDA/AULAS NUMERICO/Aula 2 exercícios/._Icon PROVA 2 GUIDI RESOLVIDA/AULAS NUMERICO/Aula 2 exercícios/terremoto1.sci // dados originais mi=[4 4.2 4.4 4.6 4.8 5 5.2 5.4 5.6 5.8 6]' Ni=[375 219 166 106 69 39 23 18 11 7 5]' //ajuste da função N(m)=10^(a-b*m) linearizada (log10) log10Ni=log10(Ni) //funções do ajuste function y=phi1(x) y=ones(x) endfunction function y=phi2(x) y=-x endfunction // construção da matriz phi Phi=[phi1(mi) phi2(mi)] // solução do ajuste linearizado a_til=(Phi'*Phi)\(Phi'*log10Ni) // parâmetros do problema original a=a_til(1) b=a_til(2) // função ajustada function y=N(x) y=10.^(a-b*x) endfunction // parâmetro ajustado a = 6,37, b=0,95 m=linspace(4,6) scf(0) plot(mi,Ni,'r.') plot(m,N(m)) xgrid __MACOSX/PROVA 2 GUIDI RESOLVIDA/AULAS NUMERICO/._Aula 2 exercícios PROVA 2 GUIDI RESOLVIDA/AULAS NUMERICO/CIRCPOTENCIA.sce r24=1;r34=1 r23=5;r14=5 r13=10 A=[0 -1 0 -r14 0 0 0; 0 -1 0 0 0 -r24 0; 1 -1 0 0 0 0 -r34; -1 0 -r13 0 0 0 0; -1 0 0 0 -r23 0 0; 0 0 0 1 0 1 1; 0 0 1 0 1 0 -1] v2=1 b=[0 -v2 0 0 -v2 0 0]' x=A\b x_alt=gausspp([A b]) //linearmente dependente C=[0 -1 0 -r14 0 0 0; 0 -1 0 0 0 -r24 0; 1 -1 0 0 0 0 -r34; -1 0 -r13 0 0 0 0; -1 0 0 0 -r23 0 0; 0 0 0 1 0 1 1; 0 0 0 1 0 1 1] //sistema imopssível y=C\b //potência dissipada em um resistor P12=0.1 P14=r14*x(4)^2 P24=r24*x(6)^2 P34=r34*x(7)^2 P13=r13*x(3)^2 P23=r23*x(5)^2 //potência total dissipada no circuito Pt=P12+P14+P24+P34+P13+P23 PROVA 2 GUIDI RESOLVIDA/AULAS NUMERICO/fu.sci function f1=fu(u,v,w) f1=-v^4*w^4+u^2*w^2^-3/2*2*u*w^2 endfunction function f2=fv(u,v,w) f2=-2(v^4*w^4+u^2*w^2)^(-3/2)*4*(v^3*w^4) endfunction function f3=fw(u,v,w) f3=-2(v^4*w^4+u^2*w^2)^(-3/2)*4*(v^4*w^3+2*u^2*w) endfunction function fa=faa(f1,f2,f3,u,v,w,erru,errv,errw) fa=(f1(u,v,w)*erru+f2(u,v,w)*errv+f3(u,v,w)*errw) endfunction err=faa(fu,fv,fw,9.1,122,140,0.04,0.01,0.01) PROVA 2 GUIDI RESOLVIDA/AULAS NUMERICO/Icon __MACOSX/PROVA 2 GUIDI RESOLVIDA/AULAS NUMERICO/._Icon PROVA 2 GUIDI RESOLVIDA/AULAS NUMERICO/m.sce fu=(-1/((v^4*w^4)+(u^2*w^2)^(3/2)))*(2*v*w^2)*eu fv=(-2/((v^4*w^4)+(u^2*w^2)^(3/2)))*(4*v^3*w^4)*ev fw=(-2/((v^4*w^4)+(u^2*w^2)^(3/2)))*(4*v^4*w^3+2*u^2*w)*ew ea=fu+fv+fw u=9.1 v=122 w=140 eu=0.04 ev=0.01 ew=0.01 PROVA 2 GUIDI RESOLVIDA/AULAS NUMERICO/questa1.4.sci function f1=fu(u,v,w) f1=(-((((v^4)*(w^4))+((u^2)*(w^2)))^(-3/2))*((2*u)*(w^2))) endfunction function f2=fv(u,v,w) f2=-2(v^4*w^4+u^2*w^2)^(-3/2)*4*(v^3*w^4) endfunction function f3=fw(u,v,w) f3=-2(v^4*w^4+u^2*w^2)^(-3/2)*4*(v^4*w^3+2*u^2*w) endfunction function fa=faa(f1,f2,f3,u,v,w,erru,errv,errw) fa=(f1(u,v,w)*erru+f2(u,v,w)*errv+f3(u,v,w)*errw) endfunction err=faa(fu,fv,fw,9.1,122,140,0.04,0.01,0.01) PROVA 2 GUIDI RESOLVIDA/AULAS NUMERICO/telemertia.sci ti=[0 .1 .18 .27 .36 .44 .53 .62 .71 .8] fi=[1 .986 .946 .879 .788 .676 .545 .399 .242 .0785] df1=(fi(2)-fi(1))/(ti(2)-ti(1)) // estimativa derivada em t=0 dfn=(fi($)-fi($-1))/(ti($)-ti($-1)) // estimativa derivada em t=0,8 dfi=splin(ti,fi,'clamped',[df1 dfn]) // visualização de dados function y=s(t) y=interp(t,ti,fi,dfi,'natural') endfunction t=linspace (0,1) scf(0) plot(ti,fi,'r.') plot(t,s(t)) xgrid // estendendo o último polinômio à direita, ele assume o valor zero próximo a t=0.8 t_imp=fsolve(0.84,s) //o impacto ocorreu aproximadamente em t=0.8436285 __MACOSX/PROVA 2 GUIDI RESOLVIDA/._AULAS NUMERICO PROVA 2 GUIDI RESOLVIDA/Icon __MACOSX/PROVA 2 GUIDI RESOLVIDA/._Icon PROVA 2 GUIDI RESOLVIDA/prova/.DS_Store __MACOSX/PROVA 2 GUIDI RESOLVIDA/prova/._.DS_Store PROVA 2 GUIDI RESOLVIDA/prova/229125.pdf UFRGS – Instituto de Matemática Depto. de Matemática Pura e Aplicada MAT01169 – Cálculo Numérico – turma �1 Prova 2-✁ – 14 de outubro de 2015 Nome completo: Cartão: Questão 1 (1 ponto): O coeficiente de expansão térmica de um vidro, αvidro, em função da temperatura é dado pela tabela abaixo. temperatura (ºC) 500 550 600 650 700 750 αvidro (10 −3/cm3) 4.43 4.96 5.56 6.37 7.49 6.68 A partir da interpolação polinomial de todos os dados da tabela, o valor aproximado para o coeficiente desse vidro a uma temperatura de 610°C vale aproximadamente: a) 5,69g/cm3 b) 5,72g/cm3 c) 5,75g/cm3 d) 5,77g/cm3 e) 5,81g/cm3 Questão 2 (1 ponto): A partir da solução do sistema de equações lineares +3x− 2y − z + 4r + 2s = 5 −x+ y + z + 2r − 4s = 4 −2x− 9y − z + 4r + 2s = 3 +4x+ 2y − z + 4r + 2s = 2 +x− y + z + r + s = 1 Determine o valor aproximado da soma (y + r): a) - 1.223936 b) - 1.450549 c) - 1.610103 d) - 1.892745 e) - 1.992376 ◆✂✄☎✆ ✶✝ Alexia Barbieri Caus 229125 Questão 3 (1 ponto): Considere um sistema de equações lineares da forma Ax = b, onde a matriz de coeficientes A possui componentes não nulas da forma (A) 1,1 = −2, (A)1,2 = 10, (A)n,n−1 = 8, (A)n,n = 1 e para i = 2, . . . , n − 1, (A)i,i−1 = 4, (A)i,i = −5, (A)i,i+1 = 4. Em um sistema com n = 25, dado que a incerteza relativa em norma 1 para b vale aproximadamente 3,4× 10−8, a estimativa para incerteza relativa no valor da solução em norma 1 vale aproximadamente : a) 4,21× 10−6 b) 4,39× 10−6 c) 4,56× 10−6 d) 4,72× 10−6 e) 4,84× 10−6 Questão 4 (1 ponto): Considere o sistema de equações { (x− 1)4 + (y − 2)4 = 16 x2 + y2 = 4 Partindo da aproximação inicial x0 = −0,5, y0 = 2 qual será o valor aproximado para o produto x× y dado pelo método Newton-Raphson após 5 iteradas? a) - 1,359483 b) - 1,462492 c) - 1,511047 d) - 1,629736 e) - 1,731865 Questão 5 (1 ponto): O sistema de equações { x3 cos(y)− x ln(xy) = 0 y3 cos(xy)− (x+ y) ln(x+ y) = 0 possui uma solução próxima de x = 0,7 e y = 1,5. Se (x∗, y∗) é esta solução, então y∗ vale aproximadamente: a) 2,087363 b)2,112397 c) 2,297983 d) 2,433321 e) 2,620276 Questão 6 (1 ponto): Dado que p é um polinômio de grau menor ou igual a n−1 que interpola um conjunto de pontos A = {(xi, yi)} n i=1, qual é a forma do polinômio q de grau menor ou igual a n+ 1 que interpola os pontos do conjunto A e também os pontos (−2, 0) e (1,−3)? a) p(x) + α(x− x1)(x− x2) . . . (x− xn) + β(x− x1)(x− x2) . . . (x− xn)(x+ 2) b) p(x) + α(x− x1)(x− x2) . . . (x− xn)(x+ 2)(x− 1) c) p(x) + α(x− x1)(x− x2) . . . (x− xn)x+ β(x− x1)(x− x2) . . . (x− xn)(x+ 3) d) p(x) + α(x− x1)(x− x2) . . . (x− xn)(x+ 2) + β(x− x1)(x− x2) . . . (x− xn)(x− 1) e) p(x) + α(x− x1)(x− x2) . . . (x− xn)x(x+ 3) Questão 7 (1 ponto): Abaixo seguem algumas medições da relação entre temperatura e a densidade da água temperatura (ºC) 0 4 5 10 15 20 ρ(g/cm3) 0.99984 0.99997 0.99996 0.99970 0.99910 0.99820 A partir da interpolação polinomial de quatro dados mais próximos da temperatura 3ºC determime uma aproximação para dρ dT (3). a) 1,189× 10−5g/cm3 ºC b) 1,277× 10−5g/cm3 ºC c) 1,314× 10−5g/cm3 ºC d) 1,406× 10−5g/cm3 ºC e) 1,445× 10−5g/cm3 ºC Questão 8 (1 ponto): Os dados a seguir contêm a informação sobre a tajetória de um corpo no plano. t (s) 0 1 2 3 4 5 6 7 8 9 10 x(cm) 1.03 1.66 2.22 2.67 2.95 3.03 2.91 2.60 2.13 1.55 0.91 y(cm) -2.33 -2.76 -3.94 -5.52 -7.04 -8.07 -8.31 -7.68 -6.38 -4.77 -3.33 A partir dos spline cúbicos do tipo completo construídos para cada coordenada com x′(0) = 0, 64, x′(10) = −0, 64, y′(0) = 0 e y′(10) = 1, 22, determine a distância aproximada desse objeto à origem no instante t = 0, 5s. a) 2,43cm b) 2,51cm c) 2,66cm d) 2,79cm e) 2,89cm Questão 9 (1 ponto): A partir da interpolação spline cúbica s(x) do tipo natural para o conjunto de dados xi 0 0.1 0.2 0.3 0.4 0.5 yi 1 0.905 0.670 0.407 0.202 0.0821 o valor x∗ para o qual s (x∗) = 0, 5 vale aproximadamente: a) 0,232946 b) 0,240284 c) 0,251937 d) 0,263292 e) 0,287253 Questão 10 (1 ponto): Utilize o seguinte conjunto de dados xi 1.00 1.56 2.11 2.67 3.22 3.78 4.33 4.89 5.44 6.00 fi -1.12 1.78 3.04 4.98 6.63 6.78 6.99 5.99 5.81 4.09 para realizar o ajuste de mínimos quadrados do modelo φ(x) := a1 ln(x) + a2 cos(x). O valor aproximado da função ajustada aos dados em x = 5 vale aproximadamente: a) 5,530 b) 5,625 c) 5,781 d) 5,888 e) 5,975 PROVA 2 GUIDI RESOLVIDA/prova/Códigos/.DS_Store __MACOSX/PROVA 2 GUIDI RESOLVIDA/prova/Códigos/._.DS_Store PROVA 2 GUIDI RESOLVIDA/prova/Códigos/Ajuste.PolOrtog.sci function y=polfit(data,grad) // Esta função calcula o ajuste de mínimos quadrados de um polinômio de grau definido // pela variável de entrada grad aos dados definidos pela variável de entrada data. O // método utilizado nessa função evita os problemas de condicionamento quando as funções // utilizadas no ajuste são polinômios. // O dados de entrada devem estar formatados como uma matriz 2Xn onde a 1ª linha contém // as abscissas dos pontos de ajuste e a 2ª linha as ordenadas desses pontos. // A variável de saída é um objeto do tipo polinômio. n=size(data,2); // quantidade de pontos a serem interpolados b=zeros(n,1); // inicialização dos coeficientes b. c=zeros(n,1); // inicialização dos coeficientes c. xi=data(1,:)'; fi=data(2,:); y=(1/n)*fi*ones(fi'); // inicialização da saída. Primeiro coeficiente -- grau zero. b(1)=(1/n)*(xi'*ones(xi)); c(1)=0; vecpol(1)=poly([-b(1) 1],'x','c'); phi_1=horner(vecpol(1),xi); a(1)=(fi*phi_1)/(norm(phi_1,2)^2); y=y+a(1)*vecpol(1); // adição do termo de grau 1. b(2)=( (xi.*phi_1)'*phi_1 )/(norm(phi_1,2)^2); c(2)=(1/n)*( (xi.*phi_1)'*ones(xi) ); vecpol(2)=poly([-b(2) 1],'x','c')*vecpol(1)-c(2); phi_2=horner(vecpol(2),xi); a(2)=(fi*phi_2)/(norm(phi_2,2)^2); y=y+a(2)*vecpol(2); // adição do termo de grau 2. for i=3:grad phi_im=horner(vecpol(i-1),xi); phi_imm=horner(vecpol(i-2),xi); b(i)=( (xi.*phi_im)'*phi_im )/(norm(phi_im,2)^2); c(i)=((xi.*phi_im)'*phi_imm)/(norm(phi_imm,2)^2); vecpol(i)=poly([-b(i) 1],'x','c')*vecpol(i-1)-c(i)*vecpol(i-2); phi_i=horner(vecpol(i),xi); a(i)=(fi*phi_i)/(norm(phi_i,2)^2); y=y+a(i)*vecpol(i); // adição dos termos de grau 3 em diante até o grau grad. end endfunction PROVA 2 GUIDI RESOLVIDA/prova/Códigos/AlgLin.Gauss-pp.sci function x=gausspp(C) // A matriz "C" deve ser a matriz completa de um sistema de equações lineares. // O programa possui duas partes: o escalonamento da matriz e o processo de // substituição. // Variáveis auxiliares // // n -> número de linhas da matriz completa. // m -> número de colunas da matriz completa. // i -> indexador de linha. // j -> indexador de coluna. // // pivot -> guarda o elemento pivô. // pivot_line -> guarda o índice de linha de um elemento pivô. // per_line -> variável booliana que indica a necessidade de trocar uma linha. // aux_line -> guarda uma das linhas a ser trocada. n=size(C,1) // Número de linhas de C. m=size(C,2) // Número de colunas de C. // // Escalonamento da matriz de coeficientes // for j=1:(n-1) pivot=C(j,j) // Inicialmente consideramos o elemento da diagonal como o pivô. per_line=%F // Inicialização da variável booliana. // verificação da necessidade de troca de linhas [pivot_cand,pivot_line]=max(abs(C(j+1:n,j))) // O candidato a novo pivô. per_line=pivot_cand>2*abs(pivot) // O candidato é maior que o pivô atual? // "Pivoteamento" parcial if per_line then pivot_line=pivot_line+j // Índice de linha do novo pivô. pivot=C(pivot_line,j) // Atualizamos o pivô. aux_line=C(j,:) // aux_line guarda a linha mais "alta". C(j,:)=C(pivot_line,:) // Troca da linha. C(pivot_line,:)=aux_line // Troca da linha. end // Eliminação dos elementos na coluna, abaixo do pivô. C(j+1:n,j+1:m)=C(j+1:n,j+1:m) - C(j,j+1:m).*.(C(j+1:n,j)/pivot) end // // Substituição // x(n,1:m-n)=C(n,n+1:m)/C(n,n) for i=n-1:-1:1 x(i,1:m-n)=(C(i,n+1:m)-C(i,i+1:n)*x(i+1:n,1:m-n))/C(i,i) end endfunction PROVA 2 GUIDI RESOLVIDA/prova/Códigos/AlgLin.Gauss-Seidel.sci function [x]=gseidel_solv(A,norma,tol,Nmax) // Calcula a solução aproximada de um sistema de equações lineares // via método Gauss-Seidl. // O sistema a*x=b deve estar na forma de uma matriz completa A:=[a b]. // A matriz de coeficientes "a" é decomposta como a=B-C onde "B" é a matriz // diagonal formada pela diagonal principal de "a". // Variáveis de entrada // A -> matriz completa de um sistema de equações lineares. // norma -> norma matricial utilizada nas estimativas de convergência. // tol -> tolerância na diferença entre duas aproximações sucessivas. // Nmax -> número máximo de iteradas. // Variável de saída // x -> solução aproximada do sistema. // Variáveis auxiliares // n -> número de linhas no sistema. // m -> número de colunas no sistema. // InvB -> inversa de B. // C -> matriz C=B-a. // InvB_b -> produto InvB*b. // InvB_C -> produto InvB*C. // x0 -> solução aproximada do sistema na iterada anterior. // segue -> variável booliana. Controla a execução das iteradas. // contador -> contador do número de iteradas. // Construção das matrizes utilizadas na iteração n=size(A,1) m=size(A,2) invB=zeros(n,n) for i=1:n invB(i,i)=1/A(i,i) end C=-A(:,1:n) for i=1:n C(i,i)=0 end invB_b=zeros(n,m-n) for i=1:n invB_b(i,1:m-n)=invB(i,i)*A(i,n+1:m) end invB_C=zeros(n,n) for i=1:n invB_C(i,1:n)=invB(i,i)*C(i,1:n) end // Aproximação inicial e inicialização das demais variáveis. x0=zeros(n,m-n) segue=%T contador=0 // Iteração while segue contador=contador+1 for i=1:n x(i)=invB_b(i)+invB_C(i,:)*x0 end segue=~(norm(x-x0,norma)<=tol|contador==Nmax) x0=x end if contador>=Nmax then warning('Não houve convergência.') end endfunction PROVA 2 GUIDI RESOLVIDA/prova/Códigos/AlgLin.Jacobi.sci function [x]=jacobi_solv(A,norma,tol,Nmax) // Calcula a solução aproximada de um sistema de equações lineares // via método de Jacobi. // O sistema a*x=b deve estar na forma de uma matriz completa A:=[a b]. // A matriz de coeficientes "a" é decomposta como a=B-C onde "B" é a matriz // diagonal formada pela diagonal principal de "a". // Variáveis de entrada // A -> matriz completa de um sistema de equações lineares. // norma -> norma matricial utilizada nas estimativas de convergência. // tol -> tolerância na diferença entre duas aproximações sucessivas. // Nmax -> número máximo de iteradas. // Variável de saída // x -> solução aproximada do sistema. // Variáveis auxiliares // n -> número de linhas no sistema. // m -> número de colunas no sistema. // InvB -> inversa de B. // C -> matriz C=B-a. // InvB_b -> produto InvB*b. // InvB_C -> produto InvB*C. // x0 -> solução aproximada do sistema na iterada anterior. // segue -> variável booliana. Controla a execução das iteradas. // contador -> contador do número de iteradas. // Construção das matrizes utilizadas na iteração n=size(A,1) m=size(A,2) invB=zeros(n,n) for i=1:n invB(i,i)=1/A(i,i) end C=-A(:,1:n) for i=1:n C(i,i)=0 end invB_b=zeros(n,m-n) for i=1:n invB_b(i,1:m-n)=invB(i,i)*A(i,n+1:m) end invB_C=zeros(n,n) for i=1:n invB_C(i,1:n)=invB(i,i)*C(i,1:n) end // Aproximação inicial e inicialização das demais variáveis. x0=zeros(n,m-n) segue=%T contador=0 // iteração while segue contador=contador+1 x=invB_b+invB_C*x0 segue=~(norm(x-x0,norma)<=tol|contador==Nmax) x0=x end if contador>=Nmax then warning('Não houve convergência.') end endfunction PROVA 2 GUIDI RESOLVIDA/prova/Códigos/fsolve_nr.sci function [z,fz,niter]=fsolve_nr(x0,%fun,%dfun,tol,Nmax) // Método Newton-Raphson // Variáveis de entrada // x0 -> aproximação inicial. // %fun -> função. // %dfun -> derivada (ou matriz jacobiana) da função. Parâmetro opcional. // tol -> tolerância na diferença relativa entre duas aproximações // sucessivas. // Nmax -> limite superior para o número de iteradas. // Variáveis de saída // z -> solução aproximada. // fz -> valor de %fun em z. // niter -> número de iteradas. // Variáveis auxiliares // dim -> dimensão do sistema de equações. // contador -> guarda o número de iteradas realizadas. // dernum -> variável booliana. É igual a %F se %dfun estiver presente. // df0 -> valor da derivada (ou determinante da jacobiana) em x0. // det_df0 -> determinante da matriz jacobiana em x0. // segue -> variável booliana. Controla o fluxo de execução das iteradas. // x1 -> aproximação na iterada seguinte. // cr_conv -> variável booliana. É igual a %T se ocorrer convergência. // abs_dif1 -> diferença absoluta entre duas aproximações sucessivas. // abs_dif0 -> diferença absoluta entre duas aproximações sucessivas na iterada // anterior. // Inicialização das variáveis dim=size(x0,1) contador=1 dernum=~isdef('%dfun','local') // Caso não tenha sido definida na chamada da função, a // tolerância recebe o valor 1e-10. if ~isdef('tol','local') then tol=1e-10 end // Caso não tenha sido definida na chamada da função, a // Nmax recebe o valor 100. if ~isdef('Nmax','local') then Nmax=100 end // A primeira iterada é calculada fora do laço principal. // Isto é necessário para avaliar a evolução do resíduo // já na 1ª iteração. if dernum then warning('As derivadas serão estimadas numericamente.') warning('Existe a possibilidade de ocorrerem erros significativos.') df0=numderivative(%fun,x0) else df0=%dfun(x0) end det_df0=det(df0) segue=det_df0<>0 if segue then x1=x0-df0\%fun(x0) else warning('A aproximação não pôde ser obtida.') warning('Verifique as aproximações iniciais ou o condicionamento.') end // "Descomente" a linha abaixo se quiseres a sequência de iterações no console: //mprintf('Iteração %d \t aproximação: %.18e\n',contador,x1) abs_dif0=abs(x0-x1) x0=x1 // Laço principal if dernum then df0=numderivative(%fun,x0) det_df0=det(df0) segue=det_df0<>0 while segue contador=contador+1 x1=x0-df0\%fun(x0) abs_dif1=norm(x0-x1,1) // "Descomente" a linha abaixo se quiseres a sequência de iterações // no console: //mprintf('Iteração %d \t aproximação: %.18e\n',contador,x1) x0=x1 df0=numderivative(%fun,x0) cr_conv=abs_dif1<=tol*norm(x1,1)|(abs_dif1>=abs_dif0 & contador>=4) segue=~(cr_conv|contador>=Nmax|det_df0==0) abs_dif0=abs_dif1 end else df0=%dfun(x0) det_df0=det(df0) segue=det_df0<>0 while segue contador=contador+1 x1=x0-df0\%fun(x0) abs_dif1=norm(x0-x1,1) // "Descomente" a linha abaixo se quiseres a sequência de iterações // no console: //mprintf('Iteração %d \t aproximação: %.18e\n',contador,x1) x0=x1 df0=%dfun(x0) cr_conv=abs_dif1<=tol*norm(x1,1)|(abs_dif1>=abs_dif0 & contador>=4) segue=~(cr_conv|contador>=Nmax|det_df0==0) abs_dif0=abs_dif1 end end // Saída de dados // Mensagens de aviso if (det_df0==0) & (~cr_conv) then if dim==1 then warning('A derivada vale zero na aproximação. Não é possível continuar.') else warning('A jacobiana é singular na aproximação. Não é possível continuar.') end end if contador==Nmax then warning(msprintf('\n A exatidão não foi alcançada em %d iterações.',Nmax)) end z=x1 fz=%fun(z) niter=contador endfunction PROVA 2 GUIDI RESOLVIDA/prova/Códigos/Icon __MACOSX/PROVA 2 GUIDI RESOLVIDA/prova/Códigos/._Icon PROVA 2 GUIDI RESOLVIDA/prova/Códigos/Interp.Lagrange.sci function [y]=lagrange_interp(data) // Essa função recebe uma matriz 2xn "data" cujas colunas correspondem aos // pares (x_i,f_i) de um conjunto de pontos. O polinômio é construído a // partir da forma de Lagrange. A saída "y" é um objeto da classe polinômio. // variáveis auxiliares // // n -> quantidade de dados. // aux -> 1ª coordenada dos pontos de interpolação. // C -> constantes normalizadoras dos polinômios de Lagrange. // Lpol -> matirz com os polinômios de Lagrange. // Inicialização de variáveis n=size(data,2); C=ones(1,n); // determinação das constantes normalizadoras for j=1:n for i=1:n if j~=i then C(j)=C(j)/(data(1,j)-data(1,i)); end; end; end; // construção dos polinômios de Lagrange for j=1:n aux=data(1,:); aux(j)=[]; Lpol(j)=C(j)*poly(aux,'x'); end; // construção do polinômio interpolante y=data(2,:)*Lpol; endfunction PROVA 2 GUIDI RESOLVIDA/prova/Códigos/Interp.sp_val.sci function [y]=sp_val(sp,xi,x) // Calcula o valor de um spline em um ponto (ou matriz linha de pontos) x. // // A entrada sp é uma matriz com os coeficientes de um spline (a j-ésima // coluna corresponde à potência j-1) e a i-ésima linha corresponde ao // i-ésimo polinômio. // A entrada xi corresponde às abscissas dos pontos de interpolação. // A saída y contém o valor do spline calculado em x. n=size(sp,1); // número de intervalos (polinômios) grau=size(sp,2); // o número de intervalos deve ser igual ao número de polinômios if n~=(size(xi,2)-1) then error('Dimensões incompatíveis') end; index=dsearch(x,xi); xp=xi(index); // y=sp(index,1)'+(x-xp).*(sp(index,2)'+(x-xp).*(sp(index,3)'+(x-xp).*sp(index,4)')); y=sp(index,grau)'; for i=grau-1:-1:1 y=sp(index,i)'+(x-xp).*y; end; endfunction PROVA 2 GUIDI RESOLVIDA/prova/Códigos/Interp.Spline3.sci function [y]=spline3_interp(data,varargin) // Essa função recebe uma matriz cujas colunas correspondem aos pares // (x_i,f_i) de um conjunto de pontos. A entrada deve ser uma matriz na // qual a 1ª linha contém os valores x_i e a 2ª linha os valores f_i. // Se houver mais de um argumento nos dados de entrada, o segundo é // utilizado como o valor da derivada na fronteira esquerda, df1; e o // terceiro como o valor da derivada na fronteira direita, dfn. // A saída é uma matriz (n-1)x4 cujas colunas correspondem aos // coeficientes de um spline cúbico natural (caso exista apenas um // único argumento) ou um spline cúbico completo ou quase completo. n=size(data,2); // quantidade de pontos a serem interpolados. y=zeros(n-1,4); // inicialização da saída. CoefC=zeros(n,n); // matriz dos coeficientes para o sistema dos termos quadráticos. ColF=zeros(n,1); // coluna com os termos constantes para o mesmo sistema. H=zeros(n-1,1); // coluna com os espaçamentos entre os valores x_i. A=data(2,:); // linha com os valores f_i. A=A'; sp_nat=(length(varargin)==0); // spline natural ? if sp_nat then // Construção do sistema para os termos quadráticos. // Caso spline natural. CoefC(1,1)=1; // condição associada ao spline natural. CoefC(n,n)=1; // condição associada ao spline natural. Obs: ColF=0 no primeiro e último termos. H(1)=data(1,2)-data(1,1); for i=2:n-1 H(i)=data(1,i+1)-data(1,i); CoefC(i,i-1)=H(i-1); CoefC(i,i)=2*(data(1,i+1)-data(1,i-1)); CoefC(i,i+1)=H(i); ColF(i)=3*((A(i+1)-A(i))/H(i)-(A(i)-A(i-1))/H(i-1)); end; else // Construção do sistema para os termos quadráticos. // Caso spline completo ou quase completo. df1=varargin(1); dfn=varargin(2); // Construção do sistema para os termos quadráticos. H(1)=data(1,2)-data(1,1); CoefC(1,1)=2*H(1); // Estas três linhas definem a 1 equação CoefC(1,2)=H(1); // do sistema para os coeficientes ColF(1)=3*((A(2)-A(1))/H(1)-df1); // quadráticos. for i=2:n-1 H(i)=data(1,i+1)-data(1,i); CoefC(i,i-1)=H(i-1); CoefC(i,i)=2*(data(1,i+1)-data(1,i-1)); CoefC(i,i+1)=H(i); ColF(i)=3*((A(i+1)-A(i))/H(i)-(A(i)-A(i-1))/H(i-1)); end; CoefC(n,n-1)=H(n-1); // Estas três linhas definem a última equação CoefC(n,n)=2*H(n-1); // do sistema para os coeficientes ColF(n)=-3*((A(n)-A(n-1))/H(n-1)-dfn);// quadráticos. end; // solução do sistema para os termos quadráticos. C=CoefC\ColF; // translação dos termos das matrizes coluna A e C (simplifica a determinação das matrizes B e D). Ctrans_dir=C; Ctrans_dir(1)=[]; C(n)=[]; Atrans_dir=A; Atrans_dir(1)=[]; A(n)=[]; // termos lineares. B=(Atrans_dir-A)./H - (H/3).*(2*C+Ctrans_dir); // termos cúbicos D=(Ctrans_dir-C)./(3*H); // montagem da saída. y(:,1)=A; y(:,2)=B; y(:,3)=C; y(:,4)=D; endfunction __MACOSX/PROVA 2 GUIDI RESOLVIDA/prova/._Códigos PROVA 2 GUIDI RESOLVIDA/prova/Icon __MACOSX/PROVA 2 GUIDI RESOLVIDA/prova/._Icon PROVA 2 GUIDI RESOLVIDA/prova/provasolved.pdf PROVA 2 GUIDI RESOLVIDA/prova/q1.sce data = [500 550 600 650 700 750;4.3 4.96 5.56 6.37 7.49 6.68] q1=horner(lagrange_interp(data),610) A=[ 3 -2 -1 4 2; -1 1 1 2 -4; -2 -9 -1 4 2; 4 2 -1 4 2; 1 -1 1 1 1] b= [5 4 3 2 1]' q2= A\b rq2=q2(2)+q2(4) A=[ 3 -2 -1 4 2; -1 1 1 2 -4; -2 -9 -1 4 2; 4 2 -1 4 2; 1 -1 1 1 1] b= [5 4 3 2 1]' q2= A\b rq2=q2(2)+q2(4) PROVA 2 GUIDI RESOLVIDA/prova/q10.sce xi10=[1 1.56 2.11 2.67 3.22 3.78 4.33 4.89 5.44 6]' fi10=[-1.12 1.78 3.04 4.98 6.63 6.78 6.99 5.99 5.81 4.09]' function y=phi1(x) y=log(x) endfunction function y=phi2(x) y=cos(x) endfunction Phi=[phi1(xi10) phi2(xi10)] a10=(Phi'*Phi)\(Phi'*fi10) q10=a10(1)*phi1(5)+a10(2)*phi2(5) PROVA 2 GUIDI RESOLVIDA/prova/q2.sce A=[ 3 -2 -1 4 2; -1 1 1 2 -4; -2 -9 -1 4 2; 4 2 -1 4 2; 1 -1 1 1 1] b= [5 4 3 2 1]' q2= A\b rq2=q2(2)+q2(4) PROVA 2 GUIDI RESOLVIDA/prova/q3.sce n3=25 a3=zeros(n3,n3) a3(1,1)=-2 a3(1,2)=10 a3(n3,n3-1)=8 a3(n3,n3)=1 for i=2:24 a3(i,i-1)=4 a3(i,i)=-5 a3(i,i+1)=4 end q3=3.4*10^-8*(norm(a3,1)*norm(inv(a3),1)) x04=[-.5 2]' function y=f3(x) y(1)= (x(1)-1)^4+(x(2)-2)^4-16 y(2)=x(1)^2+x(2)^2-4 endfunction function y=j3(x) y(1,1)=4*(x(1)-1)^3 y(1,2)=4*(x(2)-2)^3 y(2,1)=2*x(1) y(2,2)=2*x(2) endfunction [z,fz,niter] = fsolve_nr(x04,f3,j3,,5) sol=z(1)*z(2) PROVA 2 GUIDI RESOLVIDA/prova/q4.sce x04=[-.5 2]' function y=f3(x) y(1)= (x(1)-1)^4+(x(2)-2)^4-16 y(2)=x(1)^2+x(2)^2-4 endfunction function y=j3(x) y(1,1)=4*(x(1)-1)^3 y(1,2)=4*(x(2)-2)^3 y(2,1)=2*x(1) y(2,2)=2*x(2) endfunction [z,fz,niter] = fsolve_nr(x04,f3,j3,,5) sol=z(1)*z(2) PROVA 2 GUIDI RESOLVIDA/prova/q5.sce x05=[.7 1.5]' function y=f5(x) y(1)= ((x(1))^3)*cos(x(2))-x(1)*log(x(1)*x(2)) y(2)= (x(2)^3)*cos(x(1)*x(2))-(x(1)+x(2))*log(x(1)+x(2)) endfunction function y=j5(x) y(1,1)=3*x(1)^2*cos(x(2))-(log(x(1)*x(2))+1) y(1,2)=-x(1)^3*sin(x(2))-x(1)*x(2)^-1 y(2,1)=-x(2)^4*sin(x(1)*x(2))-log(x(1)+x(2))-1 y(2,2)=3*x(2)^2*cos(x(1)*y(1))-x(2)^3*x(1)*sin(x(1)*x(2))-(1+log(x(1)+x(2))) endfunction [z5,fz,niter] = fsolve_nr(x05,f5,j5) sol=z5(2) PROVA 2 GUIDI RESOLVIDA/prova/q7.sce data7= [0 4 5 10; .99984 .99997 .99996 .99970] qp7= lagrange_interp(data7) dqp7=derivat(qp7) q7=horner(dqp7,3) PROVA 2 GUIDI RESOLVIDA/prova/q8.sce x8i=[1.03 1.66 2.22 2.67 2.95 3.03 2.91 2.60 2.13 1.55 0.91] y8i=[-2.33 -2.76 -3.94 -5.52 -7.04 -8.07 -8.31 -7.68 -6.38 -4.77 -3.33] t8i=[0 1 2 3 4 5 6 7 8 9 10] dy8=[0,1.22] dx8=[0.64,-0.64] sply8=splin(t8i,y8i,"clamped",dy8) splx8=splin(t8i,x8i,"clamped",dx8) qy8=interp(0.5,t8i,y8i,sply8) qx8=interp(0.5,t8i,x8i,splx8) q8=sqrt((horner(qy8,0.5))^2+(horner(qx8,0.5))^2) PROVA 2 GUIDI RESOLVIDA/prova/q9.sce x9i=[0 0.1 0.2 0.3 0.4 0.5] y9i=[1 .905 .670 .407 .202 .0821] d=splin(x9i,y9i,"natural") [s]=interp(0.263292,x9i,y9i,sply9,'natural') disp(s) __MACOSX/PROVA 2 GUIDI RESOLVIDA/._prova PROVA 2 GUIDI RESOLVIDA/QUESTIONARIO MOODLE/ex 1 lista 3.sce n=50 A=zeros(n,n) A(1,:)=n:-1:1 A(n,:)=1:1:n for i=2:n-1 A(i,i-1)=2 A(i,i)=-4 A(i,i+1)=3 end //norm(A,2)=a //inv(A)=B //norm(B,2)=b sol=(norm(A,'fro')*norm(inv(A),'fro')*(10^-9)) PROVA 2 GUIDI RESOLVIDA/QUESTIONARIO MOODLE/ex 2 lista 3.sce n=150 h=1/(n-1) A=zeros(n,n) A(1,1)=1 A(n,n)=1 for i=2:n-1 A(i,i-1)=1 A(i,i)=((h^2)+((h^2)*cos(2*(i-1)*h)-2)) A(i,i+1)=1 end k=(norm(A,'fro')*norm(inv(A),'fro')) a=(10^(-16)) b=(10^(-16)) sol=(k/(1-k*a))*(a+b) PROVA 2 GUIDI RESOLVIDA/QUESTIONARIO MOODLE/ex1list3.sce //for i = 1:50 // Y(1,i) = 51 - i //end //for i = 2:49 // Y(i,i-1) = 2; Y(i,i) = -4; Y(i,i+1) = 3; //end //for i = 1:50 // Y(50,i) = i //end //k=norm(Y,'fro')*norm(inv(Y),'fro') //EXERCICIO 2 (TA BOM MIGUEL?) h=149^-1 B(1,1) = 1 for i = 2:149 B(i,i-1) = 1; B(i,i) = h^2+h^2*cos(2*(i-1)*h)-2; B(i,i+1) = 1; end B(150,150) = 1 c(1) = 0 for i = 2:149 c(i) = h^2*exp(-(i-1)*h) end c(150) = 0 k=norm(B,'fro')*norm(inv(B),'fro') o=k*2*(10^-16)/(1-k*10^-16) PROVA 2 GUIDI RESOLVIDA/QUESTIONARIO MOODLE/Icon __MACOSX/PROVA 2 GUIDI RESOLVIDA/QUESTIONARIO MOODLE/._Icon PROVA 2 GUIDI RESOLVIDA/QUESTIONARIO MOODLE/L4Q1.sce x0=0.76 function y=f(x) y(1)= 5*sin((x(1))^2)-2*cos(x(2))+1 y(2)= x(2)+0.8*cos(4.41*x(2))-0.75*sin(x(1)) endfunction function y=df(x) y(1,1)=2*cos((x(1)^2)^2) y(1,2)=2*sin(x(2)) y(2,1)=-0.75*cos(x(1)) y(2,2)=1-0.8*4.41*sin(4.41*x(2)) endfunction [z,dz,niter] = fsolve_nr(x0,f,df) PROVA 2 GUIDI RESOLVIDA/QUESTIONARIO MOODLE/q1l4.sce x0=[0.5 0.5]' function y=f(x) y(1)= 5*sin((x(1))^2)-2*cos(x(2))+1 y(2)= x(2)+0.8*cos(4.41*x(2))-0.75*sin(x(1)) endfunction function y=df(x) y(1,1)=2*cos((x(1)^2)^2) y(1,2)=2*sin(x(2)) y(2,1)=-0.75*cos(x(1)) y(2,2)=1-0.8*4.41*sin(4.41*x(2)) endfunction [z,dz,niter] = fsolve_nr(x0,f,df) PROVA 2 GUIDI RESOLVIDA/QUESTIONARIO MOODLE/q2l3 (2).sce n=150 a=10^-16 b=10^-16 h=1/n-1 Y=zeros(n,n) Y(1,1)=1 Y(150,150)=1 for i=2:149 y(i-1,i-1)=1 y(i+1,i+1)=1 y(i,i)=h^2*cos(2*(i-1)*h) end PROVA 2 GUIDI RESOLVIDA/QUESTIONARIO MOODLE/Q2L3.sce n=150 a=10^-16 b=10^-16 h=1/n-1 Y=zeros(n,n) Y(1,1)=1 Y(150,150)=1 for i=2:149 Y(i,i-1)=1 Y(i,i+1)=1 Y(i,i)=h^2+h^2*(cos(2*(i-1)*h))-2 end k=norm(A,'fro')*norm(inv(A),'fro') erx=k/(1-k*a)*(a+b) PROVA 2 GUIDI RESOLVIDA/QUESTIONARIO MOODLE/q3.sce for i = 1:50 Y(1,i) = 51 - i end for i = 2:49 Y(i,i-1) = 2; Y(i,i) = -4; Y(i,i+1) = 3; end for i = 1:50 Y(50,i) = i end k=norm(Y,'fro')*norm(inv(Y),'fro')*10^-9 PROVA 2 GUIDI RESOLVIDA/QUESTIONARIO MOODLE/Q3L3.sce N=[-2 0 -2 0 2 0 0; 0 -1 -1 3 0 0 0; -1 0 0 2 -3 2 0; 0 0 0 -1 0 -1 3] R=[-1.5 -0.91 -1.2 1.6 -0.24 0.88 1.3]' T=(N*N')\N*R PROVA 2 GUIDI RESOLVIDA/QUESTIONARIO MOODLE/Q3MOODLE.sce for (i=1:50) A(1,i)=51-i end for (j=2:49) A(j,j-1)=2 A(j,j)=-4 A(j,j+1)=3 end for (i=1:50) A(50,i)=i end k=(norm(A,'fro')*norm(inv(A),'fro'))*10^-9 __MACOSX/PROVA 2 GUIDI RESOLVIDA/._QUESTIONARIO MOODLE __MACOSX/._PROVA 2 GUIDI RESOLVIDA
Compartilhar