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