Advertisement
jukaukor

kayran_tasavali_plottaus.jl

Jan 3rd, 2024 (edited)
22
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.18 KB | None | 0 0
  1. # tasavälinen plottaus
  2. # Juhani Kaukoranta 7.1.2024
  3. using Plots,QuadGK,Roots,ForwardDiff
  4. n= 30# pisteiden määrä
  5. a = 0
  6. b= 8 # kaaren päätepisteiden x-arvot
  7. f(x) = sin(x)*x;
  8. derf(x) = ForwardDiff.derivative(f,x);
  9. # funktion kaaren pituus välillä 0->t:
  10. kaari(t) = quadgk(x->sqrt(1+derf(x)^2),t,b)[1]; #integroimalla t -> b
  11. jaljella(t) = quadgk(x->sqrt(1+derf(x)^2),t,b)[1]; #integroimalla t->b
  12. x = range(a,b,length=n); # plottaus ja integrointiväli a -> b, n kpl
  13. y = f.(x); #paraabelin x-arvoja vastaavat y-arvot
  14. p1=scatter(x,y,msize=2,title="tavallinen plottaus\nei tasavälinen",legend=:false,aspect_ratio=:equal);
  15. kaariab= kaari(a) # kaaren pituus välillä a->b,koko tarkasteluvälillä
  16. vakiovali = kaariab/n; # tasavälit, välejä n kpl
  17. xx = Vector{Float64}(undef,n+1);
  18. yy = Vector{Float64}(undef,n+1);
  19. for i = 1 : n+1
  20. g(t) = jaljella(t) - (i-1)*vakiovali; # kaaren jäljellä oleva pituus
  21. x1 = find_zero(g,(a+b)/2); # etsii seuraavat x-kohdat
  22. xx[i] = x1;
  23. yy[i] = f(x1);
  24. end
  25. p2=scatter(xx,yy,title="tasaväliset pisteet",msize=2,legend=:false,aspect_ratio=:equal);
  26. p3=plot(x,y,title="f(x) = x*sin(x)",legend=:false,aspect_ratio=:equal)
  27. plot(p1,p2,p3)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement