matlab中内部矩阵维度的错误

时间:2016-09-14 08:58:31

标签: matlab

我试图纠正下面的代码,但没有成功.Matlab说:

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback  {
public GoogleMap mMap;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);
    // Obtain the SupportMapFragment and get notified when the map is ready to be used.
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
}

public void onMapSearch (View view) throws IOException {

    //hide button when button is pressed
    InputMethodManager inputManager = (InputMethodManager) getSystemService(this.INPUT_METHOD_SERVICE);
    inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);

    //preview the entered address as an Tost in bar
    EditText locationSearch = (EditText) findViewById(R.id.editText);
    String location = locationSearch.getText().toString();

    //this will animate camera and zoom 12.0f
    mMap.animateCamera(CameraUpdateFactory.zoomTo(12.0f));

    //further address search codes
    List<Address> addressList = null;

    //if nothing will be entered in the edit-text will not show a toast rather than crashing of thekha app
    if (locationSearch.getText().toString().equals("")){
        Toast.makeText(this,"Bitch please enter A Value",Toast.LENGTH_LONG).show();
    }
    else {
        //process of exception handling and finding location
        if (location != null || !location.equals("")) {
            Geocoder geocoder = new Geocoder(this);
            try {
                addressList = geocoder.getFromLocationName(location, 1);
            } catch (IOException e) {
                e.printStackTrace();
              }
            //if address is greater than one then these processes will happen

            if(addressList.size()>0) {
                Address address = addressList.get(0);
                LatLng latLng = new LatLng(address.getLatitude(), address.getLongitude());
                mMap.addMarker(new MarkerOptions()
                        .position(latLng)
                        .title(location + " is Here- ")
                        .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE)));
                mMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));

                Toast.makeText(this, location+" is here, Zoom In or Zoom Out to make your Thekha Visible ", Toast.LENGTH_LONG)
                        .show(); //popup type to show entered data
            }
            else {
                //process where entered entry will not gonna find , this will gonna a toast to show popup

                Toast.makeText(this,"Entered Address Not Found", Toast.LENGTH_LONG).show();
            }
        }
    }
}

private class RetriveMarkerTask extends AsyncTask<String,Void,String> {
    private Context context;
    private GoogleMap gMap;

    public RetriveMarkerTask(Context context, GoogleMap mMap) {
        this.context = context;
        this.gMap = mMap;
    }

    protected void onPreExecute(){
        Toast.makeText(context, "pre execute", Toast.LENGTH_LONG).show();
    }

    protected String doInBackground(String... markerGetUrl) {
        android.os.Debug.waitForDebugger();

        HttpURLConnection conn = null;
        final StringBuilder json = new StringBuilder();
        int read;
        char[] buff = new char[1024];
        try {
            //connect to the web service
            URL url = new URL(markerGetUrl[0]);
            conn = (HttpURLConnection) url.openConnection();
            //This will read the json data into string builder
            InputStreamReader in = new InputStreamReader(conn.getInputStream());
            while ((read = in.read(buff)) != -1) {
                json.append(buff, 0, read);
            }
        } catch (IOException e) {
            return null;
        } catch (Exception ex) {
            return null;
        } finally {
            if (conn != null) {
                conn.disconnect();
            }
        }
        String markersJson = new String(buff).trim();
        return markersJson;
    }

    protected void onPostExecute(String markers) {

        Toast.makeText(context, "Post Execute", Toast.LENGTH_LONG).show();

        LatLng dwarka = new LatLng(28.570317,77.32182);
        gMap.moveCamera(CameraUpdateFactory.newLatLngZoom(dwarka, 13));
        gMap.addMarker(
                new MarkerOptions()
                        .title("Wine Beer Liquor Shop, Sector 18, Noida")
                        .snippet("Sector 18, Near Centre Stage Mall, Noida")
                        .position(dwarka));
        /*
        try {
            JSONArray jsonArray = new JSONArray(markers);
            for (int i =0; i<jsonArray.length(); i++){
                //create marker of each place in the json data
                JSONObject jsonObject = jsonArray.getJSONObject(i);
                String placeName = jsonObject.getString("name");
                String placeAddress = jsonObject.getString("address");
                double latitude = jsonObject.getJSONArray("latlang").getDouble(0);
                double longitude = jsonObject.getJSONArray("latlang").getDouble(1);
                LatLng loc = new LatLng(latitude, longitude);
                gMap.moveCamera(CameraUpdateFactory.newLatLngZoom(loc, 13));
                gMap.addMarker(new MarkerOptions()
                        .title(placeName)
                        .snippet(placeAddress)
                        .position(loc)
                );
            }
        }catch (JSONException e){
            e.printStackTrace();
        }
        */
    }
}

//OnReady map starts here when we can enter or add Marker to the map
@Override
public void onMapReady(GoogleMap googleMap) {
    Toast.makeText(this, "On Map ready", Toast.LENGTH_LONG).show();
    mMap = googleMap;

    try {
        String url =  new String("http://www.loofre.com/api-for-webservice/?debug=true&action=getLocations");
        RetriveMarkerTask markerTask = new RetriveMarkerTask(this, mMap);
        markerTask.execute(url);
    }catch (Exception e){
        Toast.makeText(this,"Can not fetch data",Toast.LENGTH_LONG).show();
    }
    if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission
            (this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        // TODO: Consider calling
        //    ActivityCompat#requestPermissions
        // here to request the missing permissions, and then overriding
        //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
        //  int[] grantResults)
        // to handle the case where the user grants the permission. See the documentation
        // for ActivityCompat#requestPermissions for more details.
        return;
    }
    //tool bar and other tool related on map uiSettings
    mMap.setMyLocationEnabled(true);
    mMap.getUiSettings().setZoomControlsEnabled(true);
    mMap.getUiSettings().setMapToolbarEnabled(true);
    mMap.getUiSettings().setMyLocationButtonEnabled(true);
}
}

这是代码

Error using  * 
Inner matrix dimensions must agree.

Error in 
Atten = a*l*f;

我甚至尝试使用a=[0.6 1.89 4.1 0.9 0.8 3]; l=[0.5 0.5 0.5 0.5 0.5 0.5]; f=[1000000:4000000:21000000]; Atten = a*l*f; plot(f,Atten) ,但它没有用 如何更正代码?

由于

3 个答案:

答案 0 :(得分:1)

这是一个数学问题,而不是编程错误。

你试图乘以3 [1x6]矩阵,当然这是不可能的。

也许你想要这个操作

[1x6]*[6x1]*[1x6] = [1x6]

而不是

[1x6]*[1x6]*[1x6] = Impossible

在这种情况下,您可以使用此运算符.'来转置矩阵:

Atten = a*l.'*f; 

result:
5.6450e+06   2.8225e+07   5.0805e+07   7.3385e+07   9.5965e+07   1.1855e+08

在这种情况下,l.'将是[6x1]矩阵,现在可以进行操作

有关此运算符的详细信息:Tranpose vectore or matrix

答案 1 :(得分:0)

您的矩阵维度存在不匹配。 确保将矩阵与正确的维度相乘。

您可以使用.'运算符转置矩阵。

答案 2 :(得分:0)

如果您想要按元素相乘,可以在.

前面使用*