Raízes função, Método de Newton de aproximação através da derivada, raiz=x-(y/y'), ou raiz=x-(y/(dy/dx)), y' -> 0 . Marcelo Paiva adaptado livro autor Leithold vol. 1.
'Programa freebasic Marcelo Paiva
'14/04/2020, revisado 27/05/2023
'apostrófo são comentários
'FREEBASIC compila e gera arquivo executável compatível em grande parte ao BASIC Microsoft
'https://www.freebasic.net/
'https://www.geany.org/ é uma IDE, ambiente para digitar código freebasic, compilar e executar presente para LINUX e WINDOWS
'https://fbide.freebasic.net/ é uma IDE, ambiente para digitar código freebasic , compilar e executar para WINDOWS
sub pol1
'screen 20,32,255
'screen 255,32,255
dim as double x
dim as double y
dim as double nx
dim as double ny
dim as double k
dim as double p
dim as double q
dim as double y1
dim as double rxn
dim as double y2
dim as double n
dim as string aa
dim as string bb
dim as string cc
dim as string dd
dim as integer a
dim as integer b
dim as double in
ScreenRes 1366,768,8
'color 2,8
'color RGB(64,255,64),RGB(32,4,15)->32,4,->15 fundo branco alta resolução
'Color RGB(64, 255, 64),RGB(32, 4, 15)
Color RGB(64, 255, 64),RGB(32, 4, 0)
'Color RGB(255, 255, 255), RGB(0, 0, 0)
cls
locate 0,0:print "Marcelo Paiva,mpaiva2505@gmail.com"
locate 22,5:input "entre valor ajuste da escala de x, sugestao 100,";p
locate 23,5:input "entra valor ajuste da escala de y, sugestao 30,";q
locate 24,5:input "entre o valor inicial de x :";in
'desenha eixo x e eixo y
line (0,384)-(1366,384),5
line (683,0)-(683,1366),5
'imprime escala x
for n=-40 to 40 step 1
'imprime pontos em x e y
'pset(x,y), plota ponto em x,y, x vai de 0 até 1366, canto esquerdo canto direito do vídeo - horizontal. y vai de 0 até 768, invertido, 0 no canto superior, até 768 canto inferior
line (683+p*n,384)-(683+p*n,379),1
'line (683+p*x,384)-(683+p*x,389),1
next n
a=-1
aa="y1=5*x^5-9*x^3-10*x^2+8"
bb="y2=25*x^4-27*x^2-20*x"
'desenha f(x)
for x=-40 to 40 step 0.001
y1=5*x^5-9*x^3-10*x^2+8
y2=25*x^4-27*x^2-20*x
'imprime pontos em x e y
PSet (683+(p*x),(384+(-1*q*y1))),3
next x
x=in
y1=5*x^5-9*x^3-10*x^2+8
y2=25*x^4-27*x^2-20*x
y1=5*x^5-9*x^3-10*x^2+8
y2=25*x^4-27*x^2-20*x
rxn=x-(y1/y2)
while abs(y1)>=abs(0.00001)
rxn=x-(y1/y2)
x=rxn
y1=5*x^5-9*x^3-10*x^2+8
y2=25*x^4-27*x^2-20*x
'desenha f(x)
for n=40 to -40 step -0.001
y=y2*(n)
'imprime pontos em x e y
PSet ((683+(x+rxn*p)+(p*n)),((384)+(-1*q*y))),2
next n
wend
' locate 8,5:print Using "x=###.####";x
' locate 9,5:print Using "y1=###.####";y1
' locate 10,5:print Using "y2=###.####";y2
' locate 11,5:print Using "rxn=###.####";rxn
line (690+p*rxn,378-1*q*y1)-(683+p*rxn+30,384-1*q*y1-30),13
line (690+p*rxn,378-1*q*y1)-(690+p*rxn+10,378-1*q*y1),13
line (690+p*rxn,378-1*q*y1)-(690+p*rxn,378-1*q*y1-10),13
'locate 88,170:print "x"
locate (384-1*q*y1-30)/8,(683+p*rxn+30)/7.9:print Using "x=###.########";rxn
'sleep
end sub
'###########################################################################################
sub pol2
'screen 20,32,255
'screen 255,32,255
dim as double x
dim as double y
dim as double nx
dim as double ny
dim as double k
dim as double p
dim as double q
dim as double y1
dim as double rxn
dim as double y2
dim as double n
dim as string aa
dim as string bb
dim as string cc
dim as string dd
dim as integer a
dim as integer b
dim as double in
ScreenRes 1366,768,8
'color 2,8
'color RGB(64,255,64),RGB(32,4,15)->32,4,->15 fundo branco alta resolução
'Color RGB(64, 255, 64),RGB(32, 4, 15)
Color RGB(64, 255, 64),RGB(32, 4, 0)
'Color RGB(255, 255, 255), RGB(0, 0, 0)
cls
locate 0,0:print "Marcelo Paiva,mpaiva2505@gmail.com"
locate 22,5:input "entre valor ajuste da escala de x, sugestao 100,";p
locate 23,5:input "entra valor ajuste da escala de y, sugestao 30,";q
locate 25,5:input "entre o valor inicial de x: ";in
'desenha eixo x e eixo y
line (0,384)-(1366,384),5
line (683,0)-(683,1366),5
'imprime escala x
for n=-40 to 40 step 1
'imprime pontos em x e y
'pset(x,y), plota ponto em x,y, x vai de 0 até 1366, canto esquerdo canto direito do vídeo - horizontal. y vai de 0 até 768, invertido, 0 no canto superior, até 768 canto inferior
line (683+p*n,384)-(683+p*n,379),1
next n
a=-1
aa="y1=x^2"
bb="y2=2*x"
'desenha f(x)
for x=-40 to 40 step 0.001
y1=x^2
y2=2*x
'imprime pontos em x e y
PSet (683+(p*x),(384+(-1*q*y1))),3
next x
x=in
y1=x^2
y2=2*x
rxn=x-(y1/y2)
while abs(y2)>=abs(0.00001)
rxn=x-(y1/y2)
x=rxn
y1=x^2
y2=2*x
'desenha f(x)
for n=-40 to 40 step 0.00001
y=y2*(n)
'imprime pontos em x e y
PSet ((683+(x+rxn*p)+(p*n)),((384)+(-1*q*y))),2
next n
wend
locate 8,5:print Using "x=##.####";x
locate 9,5:print Using "y1=##.####";y1
locate 10,5:print Using "y2=##.####";y2
locate 11,5:print Using "rxn=##.####";rxn
line (690+p*rxn,378-1*q*y1)-(683+p*rxn+30,384-1*q*y1-30),13
line (690+p*rxn,378-1*q*y1)-(690+p*rxn+10,378-1*q*y1),13
line (690+p*rxn,378-1*q*y1)-(690+p*rxn,378-1*q*y1-10),13
'locate 88,170:print "x"
locate (384-1*q*y1-30)/8,(683+p*rxn+30)/7.9:print Using "x=#.########";rxn
'sleep
end sub
'solicita voltar 1 ou saida 2
dim as integer es
menu:
locate 7,5:input "1-entra/retorna a>0; 2-entra/retorna a<0; 3-sair";es
IF es = 1 THEN pol1
IF es = 2 THEN pol2
if es = 3 then goto sair
'laço retorna ao link menu: 1 salta para inicio, 2 salta para sair:
goto menu:
sair:
'Aguarda tecla ser precionada para fechar programa e sair do mesmo
sleep
Comentários
Postar um comentário