Método Gauss Jacobi com interface- SCILAB

Método Gauss Jacobi com interface- SCILAB


DisciplinaCálculo Numérico14.571 materiais266.022 seguidores
Pré-visualização2 páginas
clc
BG=[0 0 0]
BG2=[1 1 1]
fonte=16
tx_ali_esq=0.22
lb_ali_esq=0.01
lb_tam=0.2
lb_h=0.053
global g_resin
global g_int
global b_graf
b_graf=0
g_int=[]
g_resin=[]
// This GUI file is generated by guibuilder version 3.0
//////////
f=figure('figure_position',[10,50],'figure_size',[1000,800],'figure_name','Janela gráfica número %d','BackgroundColor',BG)
//////////
delmenu(f.figure_id,gettext('File'))
delmenu(f.figure_id,gettext('?'))
delmenu(f.figure_id,gettext('Tools'))
delmenu(f.figure_id,gettext('Edit'))
toolbar(f.figure_id,'off')
handles.dummy = 0;
//////////
//Botões de Inf
//////////
handles.bt_info1=uicontrol(f,'unit','normalized','FontSize',[11],'Position',[0.725,0.895-0.015,0.035,0.035],'String','i','Style','pushbutton','Value',[0],'Visible','on','Tag','bt_teste','Callback','bt_info1_callback()')
handles.bt_info2=uicontrol(f,'unit','normalized','FontSize',[11],'Position',[0.425,0.797,0.035,0.035],'String','i','Style','pushbutton','Value',[0],'Visible','on','Tag','bt_teste','Callback','bt_info2_callback()')
handles.bt_info3=uicontrol(f,'unit','normalized','FontSize',[11],'Position',[0.325,0.697,0.035,0.035],'String','i','Style','pushbutton','Value',[0],'Visible','on','Tag','bt_teste','Callback','bt_info3_callback()')
handles.bt_info4=uicontrol(f,'unit','normalized','FontSize',[11],'Position',[0.325,0.597,0.035,0.035],'String','i','Style','pushbutton','Value',[0],'Visible','on','Tag','bt_teste','Callback','bt_info4_callback()')
//////////
//Botões de Ação
/////////
handles.bt_calculo=uicontrol(f,'unit','normalized','FontSize',[12],'Position',[0.07,0.2,0.15,0.08],'String','Calcular','Style','pushbutton','Value',[0],'Visible','on','Callback','bt_calculo_callback(handles)')
/////////
//Textos
/////////
handles.label=uicontrol(f,'unit','normalized','Position',[0,0.941,1,0.06],'String','MÉTODO DE GAUSS-JACOBI - RESOLUÇÃO DE SISTEMAS LINEARES','Style','text','Visible','on','FontSize',[fonte],'BackgroundColor',[1 1 1],'FontWeight','bold','HorizontalAlignment','center')
handles.label=uicontrol(f,'unit','normalized','Position',[lb_ali_esq,0.8864-0.015,lb_tam,lb_h],'String','Coeficientes:','Style','text','Visible','on','FontSize',[fonte],'BackgroundColor',BG2,'FontWeight','bold')
handles.label=uicontrol(f,'unit','normalized','Position',[lb_ali_esq,0.6871,lb_tam,lb_h],'String','Tolerância:','Style','text','Visible','on','FontSize',[fonte],'BackgroundColor',BG2,'FontWeight','bold')
handles.label=uicontrol(f,'unit','normalized','Position',[lb_ali_esq,0.5875,lb_tam,lb_h],'String','N.Max:','Style','text','Visible','on','FontSize',[fonte],'BackgroundColor',BG2,'FontWeight','bold')
handles.label=uicontrol(f,'unit','normalized','Position',[lb_ali_esq,0.7872,lb_tam,lb_h],'String','Termos Independentes:','Style','text','Visible','on','FontSize',[fonte],'BackgroundColor',BG2,'FontWeight','bold')
handles.label=uicontrol(f,'unit','normalized','Position',[lb_ali_esq,0.5,lb_tam,0.05864],'String','Resultados:','Style','text','Visible','on','FontSize',[fonte],'BackgroundColor',BG2,'FontWeight','bold')
handles.label=uicontrol(f,'unit','normalized','Position',[lb_ali_esq,0.41,lb_tam,0.05864],'String','Nº de Iterações:','Style','text','Visible','on','FontSize',[fonte],'BackgroundColor',BG2,'FontWeight','bold')
/////////
//Caixas de saida
///////////
handles.resultados=uicontrol(f,'unit','normalized','Position',[tx_ali_esq,0.5,0.2,0.06],'Style','text','Visible','on','FontSize',[fonte])
handles.n=uicontrol(f,'unit','normalized','Position',[tx_ali_esq,0.41,0.2,0.06],'Style','text','Visible','on','FontSize',[fonte])
////////
//Caixas de entrada
////////
handles.tx_results=uicontrol(f,'unit','normalized','Position',[tx_ali_esq,0.786,0.2,0.06],'String','[7;-8;6]','Style','edit','Visible','on','FontSize',[fonte])
handles.tx_matriz=uicontrol(f,'unit','normalized','Position',[tx_ali_esq,0.886-0.018,0.5,0.06],'String','[10 2 1;1 5 1; 2 3 10]','Style','edit','Visible','on','FontSize',[fonte])
handles.tx_tol=uicontrol(f,'unit','normalized','Position',[tx_ali_esq,0.686,0.1,0.06],'String','1E-4','Style','edit','Visible','on','FontSize',[fonte])
handles.tx_nmax=uicontrol(f,'unit','normalized','Position',[tx_ali_esq,0.586,0.1,0.06],'String','50','Style','edit','Visible','on','FontSize',[fonte])
function bt_calculo_callback(handles)
 clc
 //primeiro tratamento de erro
 ////////
 erro=""
 proceder = 1
 global b_graf
 b_graf=0
 if isnum(handles.tx_nmax.String) then
 else
 proceder=0
 erro="N.Max não é um número!!"
 end
 if isnum(handles.tx_tol.String) then
 else
 proceder=0
 erro="Tolerância não é um número!!" 
 end
 
 if proceder==0 then
 messagebox(erro,"Erro!","error")
 else
 
 
 //Obtenção das Matrizes e variaveis
 ////////////////////////////////////
 matriz_principal=eval(handles.tx_matriz.String)
 matriz_independentes=eval(handles.tx_results.String)
 nmax =eval(handles.tx_nmax.String)
 tol=eval(handles.tx_tol.String)
 tamanho_matriz=size(matriz_principal)
 tamanho=tamanho_matriz(1)
 tamanho_matriz_termos=size(matriz_independentes) 
 resultados = zeros(tamanho,1)
 global g_resin
 global g_int
 g_int=[]
 g_resin=[]
 g_resi=[]
 
 
 ///////
 ////condições
 ///////////
 if modulo(nmax,1)>0 then
 proceder=0
 erro="N.max não é um inteiro!!"
 end
 
 if tamanho_matriz(1)<>tamanho_matriz(2) then
 erro=&quot;A matriz de coeficientes não é uma matriz quadrada!!&quot;
 proceder =0
 end
 
 if tamanho_matriz_termos(1)<>tamanho then
 proceder=0
 erro=&quot;A matriz de termos independentes não tem o mesmo numero de linhas que a matriz de coeficientes!!&quot;
 end
 
 if tamanho_matriz_termos(2)<>1 then
 proceder=0
 erro=&quot;A matriz de termos independentes não é uma matriz coluna!!&quot;
 end
 
 if proceder==0 then
 messagebox(erro,&quot;Erro!&quot;,&quot;error&quot;)
 else
 b_graf=1
 //Repartição das Matrizes
 ////////////////////////
 matriz_diagonal=diag(diag(matriz_principal))
 matriz_diag_inv=inv(matriz_diagonal)
 matriz_triangular=(matriz_principal-matriz_diagonal)*(-1)
 D=matriz_diag_inv*matriz_triangular
 indeps=matriz_diag_inv*matriz_independentes
 
 
 //preparaçao para o laço
 //////////////////////////
 n=1
 resultados= (D*resultados)+indeps
 residuos=(matriz_principal*resultados)-matriz_independentes
 residuo = norm(residuos)
 residuo = (residuo^(1/2))
 
 //laço principal
 //////////////////
 
 while residuo>tol & n < nmax
 residuo=0
 resultados= (D*resultados)+indeps
 residuos=(matriz_principal*resultados)-matriz_independentes
 residuo = norm(residuos)
 g_int(n)=n
 g_resi(n)=residuo
 g_resin(n)=residuos(1)
 n= n+1
 //disp(resultados)
 end
 
 //Mostrar valores
 ///////////////
 resultados = resultados*10
 resultados = round(resultados)
 resultados = resultados/10
 texto=sci2exp(resultados)
 texto2=sci2exp(n)
 handles.resultados.String = texto
 handles.n.String=texto2
 
 end
end
endfunction
function bt_info1_callback()
 stg1= [&quot;Neste campo deve ser adcionado uma matriz referente aos coeficientes do sistema.&quot;;&quot;&quot;;&quot;- Ela deve ser obrigatóriamente uma matriz quadrada.&quot;;&quot;- Ela deve