Jump to content
php.lv forumi

Recommended Posts

Posted (edited)

Sveiki.

 

Var kāds palīdzēt un pārvērst to uz PHP/JavaScript? http://www.ptac.gov.lv/page/553

Padod trīs vērtības: summa, termiņš dienās, pārmaksa.

 

Kā šo daļu var uzrakstīt iekš PHP?

le42fdr4wslm0qrjui61.png

Ja būtu parasti kvadrātsakne, tad izmantotu sqrt() f-iju, bet kā ir šajā gadījumā?

Edited by mashiina
Posted (edited)

Es piemirsis biju kā matemātiski to rēķina.

<?
echo pow(1.1, 1/(14/365));
?>

Edit: Pēc linka pirmā piemēra saprotams, bet kā atrisināt uz vairākiem mēnešiem?

Edited by mashiina
Posted

Lai aprekinatu, tev jau nav jaizsaka x, vienkarsi cikla veic darbibas un sanemsi savu GPL

Posted (edited)

Lai aprekinatu, tev jau nav jaizsaka x, vienkarsi cikla veic darbibas un sanemsi savu GPL

Ja domā pēc pirmā piemēra, tad tā nebūs pareizi.

 

Pirms tam nepareizi izteicos. Nevis vajag izteikt x, bet gan to pārnest vienā pusē-otrā pusē paliek neatrisināti skaitļi, lai saprastu ar kurām vērtībām ir jāveic darbības.

Edited by mashiina
Posted

Ā, es domāju, ka problēma ir triviāla un neprasa manu skaidrojumu.

Tā kā funkcija acīmredzami ir bez minimumiem un maksimumiem, tad x var ļoti viegli atrast ar bināro meklēšanu.

Izveidojam funkciju f(x)=0, tas ir visu pārnesam vienā pusē, lai otrā pusē būtu nulle.

Tad izvēlamies iespējamo minimumu un maksimumu un ņemam x pa vidu, pēc kā izrēķinam funkcija rezultātu un attiecīgi uz jauno vietu pārbīdām minimumu vai maksimumu.

 

http://codepad.org/eimN3SzZ

<?php

function f($x){
  return 20/pow(1+$x,14/365)+24/pow(1+$x,28/365)+1-40;
}

$min=-999999999;
$max=999999999;
while(abs($max-$min)>0.000001){
  $cur=($max+$min)/2;
  $rez=f($cur);
  if ($rez<0) $max=$cur; else $min=$cur;
}

echo $cur*100;
Posted (edited)

 

Ā, es domāju, ka problēma ir triviāla un neprasa manu skaidrojumu.

Tā kā funkcija acīmredzami ir bez minimumiem un maksimumiem, tad x var ļoti viegli atrast ar bināro meklēšanu.

Izveidojam funkciju f(x)=0, tas ir visu pārnesam vienā pusē, lai otrā pusē būtu nulle.

Tad izvēlamies iespējamo minimumu un maksimumu un ņemam x pa vidu, pēc kā izrēķinam funkcija rezultātu un attiecīgi uz jauno vietu pārbīdām minimumu vai maksimumu.

 

http://codepad.org/eimN3SzZ

<?php

function f($x){
  return 20/pow(1+$x,14/365)+24/pow(1+$x,28/365)+1-40;
}

$min=-999999999;
$max=999999999;
while(abs($max-$min)>0.000001){
  $cur=($max+$min)/2;
  $rez=f($cur);
  if ($rez<0) $max=$cur; else $min=$cur;
}

echo $cur*100;

 

Mazliet palaboju priekš sevīm.

<?
function f($x,$payments,$amount,$split_months=false){
    foreach($payments as $payment => $term){
        $out+=$payment/pow(1+$x,$term/($split_months?12:365));
    }
    return $out-$amount;
}

$payments_arr=array(
    "3.00"=>"0",
    "25.18"=>"1",
    "25.180"=>"2",
    "25.1800"=>"3",
    "25.18000"=>"4",
    "25.180000"=>"5",
    "25.1800000"=>"6",
    "25.18000000"=>"7",
    "25.180000000"=>"8",
    "25.1800000000"=>"9",
    "25.18000000000"=>"10",
    "25.180000000000"=>"11",
    "25.1800000000000"=>"12",
);
$amount=200;
$split_months=true;

$min=-999999999;
$max=999999999;
while(abs($max-$min)>0.000001){
  $cur=($max+$min)/2;
  $rez=f($cur,$payments_arr,$amount,$split_months);
  if ($rez<0) $max=$cur; else $min=$cur;
}

echo $cur*100;

Ja $payments_arr masīvā būs vienāds key skaitlis, tad x neatradīs. Kā šo varētu izlabot?

Edited by mashiina

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...